我已经使用 pgf-pie 创建了饼图,并且遇到了与此完全相同的问题pgf-pie 问题。
我修改了 pgf-pie 代码,在主圆外绘制小百分比。但还有一个问题:如果数字非常小,这些值会相互叠加:
恕我直言,这只能在图表本身上修复。我为所有打印百分比值的节点添加了名称。我想更改这些节点的样式或位置。有什么办法吗?
更改了第 58 行的 pgf-pie 代码。
%\path (O) -- ++(\midangle:\innerpos)
%node {\scalefont{#3}\beforenumber\fnum\afternumber};
\pgfmathprintnumberto{#3}{\fnum}
\ifthenelse{\lengthtest{#3 pt < 10pt}}
{
\path (O) -- ++ (\midangle:\radius)
node[inner sep=0,align=left,anchor=west,rotate=\midangle](nums#3){~~\fnum};
}
{
\path (O) -- ++(\midangle:\innerpos)
node {\scalefont{#3}\beforenumber\fnum\afternumber};
}
图表:
\begin{tikzpicture}[every legend entry/.append style={text width=5cm,font=\footnotesize},scale=0.95]
\pie[
sum=auto,
text=legend,
rotate =90,
radius=5.0,
after number=\%,
]
{
0.444/message transport other,
67.792/sign,
0.175/forwarding,
0.433/links send other ,
1.093/serialize message,
2.336/send message,
2.336/link receive ,
2.232/forwarding receive ,
10.770/parse signature block,
11.818/verify signature,
0.570/parse message content}
%\draw (0,0) node[outer sep=0pt,fill=blue,below of=nums0.433,anchor=west] {filled};\end{tikzpicture}
答案1
pgf-pie
由于该软件包缺乏灵活性(以及使用主 PGFkeys 路径),我不太推荐它,但是由于您已经更改了其原始代码,因此您可以为您的节点添加一种特殊样式:
\path (O) -- ++ (\midangle:\radius) node[
inner sep=0, align=left, anchor=west, rotate=\midangle,
special style={\midangle}{#3}] (nums#3) {\beforenumber\fnum\afternumber};
如果您正确设置special style
以便它检查(它自己),#2
它可以应用另一个类似的转变shift=(#1:1cm)
(当然可以用其他样式和/或值进行设置。
我怀疑#3
是不是您可以使用的最佳参数,因为它将包含您值中的小数点(如果您想引用这样的节点,它将被理解为节点名称和其锚点之间的分隔符)。您可能只想\i
在这里使用(对于名称和特殊样式),它pgf-pie
实际上用作循环的计数器宏(参见第 407ff 行的定义\pie
),但不会转发到\pgfpie@slice
。
答案2
这轮图我写的包,可以使用。
定义一个命令\WCtest
,其输出取决于百分比是否大于 3。此命令用于键data
和wheel data
。此处,使用 来获取百分比\WCperc
。
使用 键移动数据放置点的角度data angle shift
。
图例由键决定legend
。这是一个tabular
放置在 中的\node
。行由键决定legend row
。可以使用 获得所有行的结果\WClegend
。
在密钥中slices style
我们使用\WClistcolors
引用给定密钥的列表中的项目WClistcolors
。
\documentclass[border=6pt]{standalone}
\usepackage{wheelchart}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\def\WCtest#1#2{%
\pgfmathparse{\WCpercentage>3?"#1":"#2"}%
\pgfmathresult%
}
\wheelchart[
counterclockwise,
data=\WCtest{}{\WCperc},
data angle shift=\WCvarB,
data style={rotate=\WCmidangle,anchor=west},
legend row={\tikz\fill[\WClistcolors,draw=black] (0,0) rectangle (0.3,0.3); & \WCvarC},
legend={
\node[anchor=west] at (6,3.5) {%
\begin{tabular}{l@{ }l}%
\WClegend%
\end{tabular}%
};
},
perc precision=2,
radius={0}{5},
slices style={\WClistcolors,draw=black},
WClistcolors={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,blue!60},
wheel data=\WCtest{\WCperc}{}
]{%
0.444/1/message transport other,
67.792/0/sign,
0.175/-3/forwarding,
0.433/0/links send other,
1.093/1/serialize message,
2.336/0/send message,
2.336/0/link receive,
2.232/0/forwarding receive,
10.770/0/parse signature block,
11.818/0/verify signature,
0.570/-1/parse message content%
}
\end{tikzpicture}
\end{document}