我想将饼图中的数字显示在图例中。我该如何实现?
以下是 MWE:
\documentclass{article}
\usepackage{pgf-pie}
\usepackage{tikz}
\usetikzlibrary{shadows}
\begin{document}
\begin{tikzpicture}
\pie[text=legend,style=drop shadow,radius=2]{51.3/Protestant, 23.9/Roman Catholic, 3.3/Other Christian, 1.7/Jewish, 0.7/Buddhist, 0.6/Muslim, 0.4/Hindu, 1.2/Other religions, 16.1/No religion }
\end{tikzpicture}
\end{document}
编辑:
我还有另一个饼图,其中的文本很长。如何设置文本的宽度,以便它在页面结束前换行?它看起来像这样:
我忘了 PGF-PIE 不在 CTAN 上。以下是 Google 源的链接:http://code.google.com/p/pgf-pie/
答案1
该pgf-pie
软件包并不像人们希望的那样灵活。不幸的是,etoolbox
它拒绝修补,因此我们手动进行修补。
打开(复制/备份)文件pgf-pie.sty
并滚动到末尾,其中有一部分被括起来\iflegend … \fi
。将括起来的scope
环境替换为:
\begin{scope}[node distance=+0pt]
\foreach \p/\t [count=\i from 0] in {#2}
{
\pgfpie@findColor{\i}
\node[below=of legendpos.south west, anchor=north west, every legend entry/.try, name=legendpos] {\t\ifpienumberinlegend\legendbeforenumber\p\legendafternumber\fi};
\node[draw, fill=\thecolor, \style, at=(legendpos.base west), anchor=south east] {};
}
\end{scope}
现在您可以使用number in legend
样式(它应该位于before number
and之后after number
!)。
对于较长的图例条目,你可以使用every legend entry
如下样式:
every legend entry/.append style={text width=2cm}
设置现在允许这样做(节点距离设置为零inner ysep
,因为在我看来,在条目之间创建了足够的空间。
您需要positioning
更新below=of
语法的库。
代码
\documentclass[tikz]{standalone}
\usepackage{pgf-pie}
\usetikzlibrary{positioning,shadows}
\newif\ifpienumberinlegend
\pgfkeys{/number in legend/.code=
\expandafter\let\expandafter\ifpienumberinlegend
\csname if#1\endcsname
\ifpienumberinlegend
\let\legendbeforenumber\beforenumber
\let\legendafternumber\afternumber
\def\beforenumber##1\afternumber{}%
\fi,
/number in legend/.default=true
}
\begin{document}
\begin{tikzpicture}[every legend entry/.append style={text width=2cm}]
\pie[text=legend, style=drop shadow, radius=2, before number=\ (, after number=\,\%), number in legend]{51.3/Protestant, 23.9/Roman Catholic, 3.3/Other Christian, 1.7/Jewish, 0.7/Buddhist, 0.6/Muslim, 0.4/Hindu, 1.2/Other religions, 16.1/No religion }
\end{tikzpicture}
\end{document}