使用 Tikz 进行探测图表

使用 Tikz 进行探测图表

我在法国从事科学和地理生物学工作,我想创建自定义探测图表,看起来像这个例子:

在此处输入图片描述

或者

在此处输入图片描述

实际上,我不太擅长编程,我只是一个普通的 latex 用户,所以我可能需要一些帮助才能开始使用。也许有人能想到一些线索/例子,以便让 TikZ 也能使用它。

我想在脑海中输入一个术语列表,然后 TikZ 脚本会自动将其拆分为角度部分并实现自动化。

答案1

欢迎!画这样的东西并不太难。一种方法是定义一张图片并一遍又一遍地重复它。然而,从屏幕截图中输入文字有点麻烦。所以我用通用文本替换了其中一些。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,bending,decorations.text,positioning}
\begin{document}
\begin{tikzpicture}[font=\sffamily,node distance=1ex,
    pics/pilz/.style={code={
     \tikzset{pilz/.cd,#1}
     \def\pv##1{\pgfkeysvalueof{/tikz/pilz/##1}}%   
     \draw[pic actions] (\pv{alpha}+\pv{beta}/2:\pv{r}) -- (\pv{alpha}+\pv{beta}/2:\pv{R}) 
      foreach \XX in {1,...,\pv{n}} 
      {to[out=0,in=-120] 
        ({{\pv{alpha}+\pv{beta}/2-\XX*\pv{beta}/\pv{n}+\pv{beta}/(2*\pv{n})}}:\pv{xi}*\pv{R})
      to[out=-60,in=180] 
        ({\pv{alpha}+\pv{beta}/2-\XX*\pv{beta}/\pv{n}}:\pv{R})}
      -- (\pv{alpha}-\pv{beta}/2:\pv{r});   
      \path[decorate,decoration={text along path, text=\pv{text},text align=center}]
      (\pv{alpha}+\pv{beta}/2:\pv{r}/2+\pv{R}/2) 
      arc[start angle=\pv{alpha}+\pv{beta}/2,end angle=\pv{alpha}-\pv{beta}/2,
       radius=\pv{r}/2+\pv{R}/2];
    }},pilz/.cd,r/.initial=1,R/.initial=2,alpha/.initial=90,
    beta/.initial=45,xi/.initial=1.1,text/.initial={},n/.initial=1]
 \path foreach \Y [count=\X] in {fox,marmot,cat,koala,bear,duck,mouse,%
 anteater,rhino,hippo,lion,tiger,lynx,owl}  
  {pic[rotate={90+180/28-180*\X/14}]{pilz={beta=180/14,r=5,R=6.5,text=|\sffamily|\Y}}
  };
 \foreach \X in {-10,...,10} 
 {\pic[rotate={-180*\X/21},fill=gray!25]{pilz={beta=180/21,r=4,R=5,xi=1.05}};
  \path   (90-180*\X/21:4.7)node{$\mathsf{\X}$};
 }
 \path foreach \Y [count=\X] in {mental,spiritual,overall,physical,eotional}    
  {pic[rotate={90+180/10-180*\X/5},fill=white]{pilz={beta=180/5,n=3,r=3,R=4,xi=1.05,
    text=|\sffamily|\Y}}
  };
 \path foreach \Y [count=\X] in {astral,etheric,celestial,karmic,univeral}  
  {pic[rotate={90+180/10-180*\X/5},fill=gray!25]{pilz={beta=180/5,n=3,r=2,R=3,xi=1.05,
    text=|\sffamily|\Y}}
  };
 \path foreach \Y [count=\X] in {critical,poor,fair,good,excellent} 
  {pic[rotate={90+180/10-180*\X/5},fill=white]{pilz={beta=180/5,n=3,r=1,R=2,xi=1.05,
    text=|\sffamily\tiny|\Y}}
  };
 \draw foreach \X in {0,...,5} 
 {(\X*180/5:0.5) --(\X*180/5:1.5)};
 \draw[fill] (0.5,0) arc[start angle=0,end angle=180,radius=0.5];
 \path (0,0) node[below=1ex] (L){level of health}
  node[below=of L] (B){bodies}
  node[below=of B] (P){percentage of health}
  node[below=of P] (O){organs of the body};
 \foreach \X/\Y [count=\Z] in {L/1.25,B/2.5,B/3.5,P/4.5,O/5.75} 
 {\draw[thick,-{Latex[bend,length=2mm]}] (\X) -- (\Y-0.1*\Z,0|-\X) to[bend right=15] (\Y,0);
 \draw[thick,-{Latex[bend,length=2mm]}] (\X) -- (-\Y+0.1*\Z,0|-\X) to[bend left=15] (-\Y,0);}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容