我如何创建一个饼图,如果其中一个标签不适合,它将从文本切换inside
为文本pin
,或者使用 pgf-pie 为每个部分手动定义它,就像这样?
到目前为止我只有:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{pgf-pie}
\begin{document}
\begin{tikzpicture}
\pie [rotate = 180,color={black!00},text=inside]
{49/Drive Alone,
15/Car Pool, 4/Bicycle,22/Walk,10/Walk}
\end{tikzpicture}
\end{document}
答案1
要实现这个功能,需要对pgf-pie
软件包本身进行一些修改。我把修改后的版本放在了网上pgf-pie.sty 的修改版本
您需要将其下载pgf-pie-hacked.sty
到 LaTeX 找到的位置(出于测试目的,您可以将其保存在与 LaTeX 文档相同的文件夹中)。将其与 一起使用\usepackage{pgf-pie-hacked}
。
宏\pie
- 仅适用于循环模式!我没有触及其他的 - 现在需要对每个切片进行明确的规范,如下所示:
\usepackage{pgf-pie-hacked}
\begin{document}
\begin{tikzpicture}
\pie [rotate = 180,color={black!00}]
{49/Drive Alone/inside, 15/Car Pool/inside, 4/Bicycle/pin, 22/Walk/inside, 10/Walk/inside}
\end{tikzpicture}
\end{document}
答案2
正如@Michael所说,pgf-pie 包本身不支持此功能。因此,唯一的解决方案是更改 中的定义pgf-pie.sty
。
我提出了一个不同的解决方案,它更“自动化”。这个想法是设置一个角度阈值,低于这个阈值,文本就会自动被钉在钉子上。修改后的包是在这个要点中。这里有一个演示,其中所有小于 50 度 ( outside under=50
) 的切片都会将文本固定为:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{pgf-pie}
\begin{document}
\begin{tikzpicture}
\pie [rotate = 180,color={black!00},text=inside,outside under=50]
{49/Drive Alone,
15/Car Pool, 4/Bicycle,22/Walk,10/Walk}
\end{tikzpicture}
\end{document}
不幸的是,pgf-pie 的设计将数字和标签分开处理,因此,要将数字与文本一起移动,就需要进行一些重构。为了提供更多的灵活性,我添加了no number
完全删除数字的样式,例如,您可以手动将它们嵌入标签中。为了增加灵活性,我将\and
其定义为在内部时为换行符,在外部时为空格。要强制换行,请\\
使用\and
\begin{tikzpicture}
\pie [rotate = 180,color={black!00},text=inside,outside under=50,no number]
{49/Drive Alone\and49\%,
15/Car Pool\and15\%, 4/Bicycle\and4\%,22/Walk\and22\%,10/Walk\and10\%}
\end{tikzpicture}
答案3
这轮图我写的包,可以使用。
定义一个命令\WCtest
,其输出取决于百分比是否大于 4。此命令用于键data
和wheel data
。此处,使用 来获取百分比\WCperc
。
通过使用键lines={\WCpercentage>4?0:1}
,如果百分比大于 4,则线的长度为 0,否则为 1。
\documentclass[border=6pt]{standalone}
\usepackage{wheelchart}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\def\WCtest#1#2{%
\pgfmathparse{\WCpercentage>4?"#1":"#2"}%
\pgfmathresult%
}
\wheelchart[
data=\WCtest{}{\WCvarB{} \WCperc},
lines={\WCpercentage>4?0:1},
lines sep=-0.5,
radius={0}{4},
slices style={
fill=none,
draw=black,
line join=bevel
},
wheel data=\WCtest{\WCvarB{} \WCperc}{}
]{%
22/Walk,
10/Bus,
49/Drive Alone,
15/Car Pool,
4/Bicycle%
}
\end{tikzpicture}
\end{document}
答案4
您可以尝试类似的方法:
\documentclass[tikz, border=5pt]{standalone}
\usepackage{pgf-pie}
\begin{document}
\begin{tikzpicture}[]
\def\printonly#1{\pgfmathparse{#1>3 ? "#1" : ""}\pgfmathresult}
\pie[
sum=auto,
before number=\printonly
] {11/A,
4/\tikz[]{\draw[shorten <=-5mm, thin] (0:-1) -- +(33:5mm) node[]{tiny};},
79.9/C,
10/D,
1/\tikz[]{
\draw[shorten <=-5mm, thin] (0:0) -- +(0:5mm) node[]{$1\%$ very tiny};
} }
\end{tikzpicture}
\end{document}