我对 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
来修改相对位置。这(和比例)允许在每个扇区中放置更多文本,或放置多行文本。我还(大致)调整了垂直对齐,以便顺时针和逆时针文本处于同一高度。