如何为 pgf-pie 设置默认设置,并使饼图上和饼图外部的文本具有不同的颜色?

如何为 pgf-pie 设置默认设置,并使饼图上和饼图外部的文本具有不同的颜色?

我将pgf-pie其用于简单的饼图,并希望定义一个默认用于所有图表的配色方案。由于它似乎pgf-pie默认不提供样式或颜色列表,因此我尝试通过定义一个\MYpie命令来解决这个问题,该命令在应用特定设置之前设置一些标准选项。到目前为止,这在我的 MWE 中有效:

\documentclass{standalone}

\usepackage{pgf-pie}

\newcommand{\MYpie}[2][]{\pie[color={black,red,blue,orange},/tikz/draw=white,/tikz/text=white,#1]{#2}}

\begin{document}
\begin{tikzpicture}%[draw=white,text=white]
\MYpie{10/A, 20/B, 30/C, 10/D, 10/E, 10/F, 10/G}
\MYpie[pos={8,0}, square] {23/A, 27/B, 17/C, 13/D, 20/E}
\MYpie[pos={2,-8}, cloud] {10/A, 20/B, 30/C, 20/D, 20/E}
\end{tikzpicture}
\end{document}

但是有两个问题:第一个是,如果我尝试将白色文本和绘图引入我的\newcommand{\MYpie},就像我上面所做的那样,那么我会得到白色的文本,但没有绘制的线条,如果我改用%[draw=white,text=white],它可以正常工作。

第二个问题是:如果我的文本是白色的,这适用于饼图上和饼图外的文本,但这会导致饼图外的文本不可见。那么,是否可以使用 pgf-pie 选择不同的颜色?

答案1

的键值方案pgf-pie...不太灵活也不太健壮。因此我打了补丁\pie让你使用

  • 或指定配色方案\pgfkeys{color=...}\pie[color=...]
  • \pie[/tikz/<key>=<value>]指定 tikz 选项,其范围限制为当前\pie

为了达到预期的效果,在下面的示例中我使用:

  • nodes={white}将节点文本设置为白色,
  • every label/.style={black}将标签文本(饼图外的文本)从白色恢复为黑色,因为标签是节点的子类型,
  • draw=white将线设置为白色。
\documentclass{article}
\usepackage{pgf-pie}
\usepackage{xpatch}

% remove hard-coded color wheel
\xpatchcmd\pie
  {color={blue!60, cyan!60, yellow!60, orange!60, red!60,
        blue!60!cyan!60, cyan!60!yellow!60, red!60!cyan!60,
        red!60!blue!60, orange!60!cyan!60},}
  {}
  {}{\fail}

% restrict the scope of \pie options
\xpretocmd\pie{\begingroup}{}{\fail}
\xapptocmd\pie{\endgroup}{}{\fail}


\makeatletter
% set default color wheel
\def\pgfpie@color{%
  blue!60, cyan!60, yellow!60, orange!60, red!60,
  blue!60!cyan!60, cyan!60!yellow!60, red!60!cyan!60,
  red!60!blue!60, orange!60!cyan!60}
\makeatother

% set new color wheel
\pgfkeys{
  color={black,red,blue,orange}
}

\begin{document}

\tikzset{
  % restricted by implementation, \pie[style=...] accepts single key-value pair
  pie style/.style={thick, draw=white}
}

\begin{tikzpicture}[every label/.style={black}, nodes={white}]
  \pie[style={pie style}] {10/A, 20/B, 30/C, 10/D, 10/E, 10/F, 10/G}

  % test scope
  \pie[
    color={blue!60, cyan!60, yellow!60, orange!60},
    /tikz/nodes={black},
    pos={8,0},
    square,
    style={pie style}
  ] {23/A, 27/B, 17/C, 13/D, 20/E}

  \pie[pos={2,-8}, cloud, style={pie style}] {10/A, 20/B, 30/C, 20/D, 20/E}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容