如何制作饼图,自动将“内部”文本更改为“固定”

如何制作饼图,自动将“内部”文本更改为“固定”

我如何创建一个饼图,如果其中一个标签不适合,它将从文本切换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。此命令用于键datawheel 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}

相关内容