我将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}