需要饼图方面的帮助(TikZ)

需要饼图方面的帮助(TikZ)

我对 Tikz 的使用经验很少,但我想重新创建一个图表。原始图表如下所示:

示例图

幸运的是,我找到了一个适合此图表的好模板,它还允许标签沿线循环放置。(不幸的是,这就是问题所在,为什么我用其他程序却无所获。)

此模板+图片可在以下位置找到:

参见该问题的第一个答案

或者像这样:

\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
  \draw [thick] (0,0) circle (3cm);
  \foreach \i/\j/\k in {0/something/tadpole,45/anything/cauldron,90/another/bread soup,135/whatever/rock candy,180/whenever/lollipop,225/whoever/Bell of Bow,270/why ever/seesaw,315/nothing/roundabout} {
    \draw [black] (0,0) -- (\i:3cm);
    \path [decorate, decoration={text along path, text=\j, text align=center}] (\i:27.5mm) arc (\i:{\i+45}:27.5mm);
    \path [decorate, decoration={text along path, text=\k, text align=center}] (\i:24mm) arc (\i:{\i+45}:24mm);
  }
\end{tikzpicture}
\end{document}

我的问题是如何重新设计此代码,以便我能够跟踪示例图像中的图表。问题是此代码仅适用于均匀分割的圆。(例如,对于较小的图表,我已经成功地将此圆分成三个相等的部分,并在其上方创建第二个两倍大小的圆,但这些尝试在这里不再足够)。

如果有人能帮助我创建一个代码,其中最多有 12 个单个字段(如示例图片中最外圈的环)或更少的字段,这些字段不再均匀分布,而文本仍然位于较大字段的中心,那就太巧妙了。

我的知识还不够。我只能从代码推导中创建这个较小的图表,而我自己并没有编写过程序。

如果我可以用新代码单独生成每个环,那对我来说也很好。因此从圆心开始的直线甚至不必在编程中被打断……我可以在后期处理中手动完成。

如果我能以某种方式使此图表可进行数字编辑,我会很高兴。非常感谢您的支持!:)

答案1

为了便于阅读,我将制作一个宏,将所有文本放入其路径中,但它本质上与成本加运费在您提供的链接中。此外,我们必须绘制几个圆圈和线条。

像这样:

\documentclass[border=2mm]{standalone}
\usepackage    {ifthen}
\usepackage    {tikz}
\usetikzlibrary{decorations.text}

\newcommand\mytext[6] % inner radius, outer radius, start angle, end angle, relative position, text
{%
  \pgfmathsetmacro\myradius{#5*#2+(1-#5)*#1}
  \ifthenelse{#3 > #4}{\def\raiseamount{0}}{\def\raiseamount{-0.18 cm}}
  \path[decorate, decoration={text along path, text=#6, text align=center, raise=\raiseamount}]
    (#3:\myradius) arc (#3:#4:\myradius);
}

\begin{document}
\begin{tikzpicture}[scale=1.5,line join=round,line cap=round]
  % radii
  \def\ra{1}
  \def\rb{2}
  \def\rc{3}
  \def\rd{4.5}
  \def\re{5.5}
  % circles
  \foreach\i in {\ra,\rb,\rc,\rd,\re}
  {%
    \draw[thick] (0,0) circle (\i);
  }
  % lines
  \foreach\a/\i in {  0/\rd/,  30/0,    60/\rb,  90/0,   120/\rd, 150/0,%
                    180/\rb,  210/\rd, 240/\ra, 270/\rd, 300/\rd, 330/\rd}
  {%
    \draw[thick] (\a:\i) -- (\a:\re);
  }
  % labels
  \mytext{0}  {\ra}{90}  {30}{0.8}{aaa aa}
  \mytext{0}  {\ra}{150} {90}{0.8}{bbb bb}
  \mytext{0}  {\ra}{150}{390}{0.8}{Hole in the sky} 
  %
  \mytext{\ra}{\rb} {90} {30}{0.5}{dd dd dd}
  \mytext{\ra}{\rb}{150} {90}{0.5}{eee eee}
  \mytext{\ra}{\rb}{150}{240}{0.5}{ff ff ff}
  \mytext{\ra}{\rb}{240}{390}{0.5}{Gateway to heaven}
  %
  \mytext{\rb}{\rc} {60} {30}{0.5}{hh}
  \mytext{\rb}{\rc} {90} {60}{0.5}{ii}
  \mytext{\rb}{\rc}{150} {90}{0.5}{jjjj}
  \mytext{\rb}{\rc}{180}{150}{0.5}{kk kk}
  \mytext{\rb}{\rc}{180}{240}{0.5}{and so on...}
  \mytext{\rb}{\rc}{240}{390}{0.5}{I don't know any more words to put here}
  % example with two lines
  \mytext{\rc}{\rd} {90} {60}{0.7}{Window in time}
  \mytext{\rc}{\rd} {90} {60}{0.3}{Through it I'll fly}
  % and so on
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑:我在宏中添加了一个附加参数\mytext来修改相对位置。这(和比例)允许在每个扇区中放置更多文本,或放置多行文本。我还(大致)调整了垂直对齐,以便顺时针和逆时针文本处于同一高度。

相关内容