使用 pgf 饼图将数字放入图例中

使用 pgf 饼图将数字放入图例中

我想将饼图中的数字显示在图例中。我该如何实现?

以下是 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 numberand之后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}

输出

在此处输入图片描述

相关内容