以不同角度创建不同半径的圆形扇区

以不同角度创建不同半径的圆形扇区

我是 Tikz 新手。如何在 tikz 中绘制类似下面的内容。每个扇区的角度/半径是固定的,但位置可能会改变。不需要文本/网格。 径向条形图

这是我目前所拥有的

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw circle (1cm);
\filldraw[fill=blue!40] 
     (320:1cm) -- (0,0) -- (220:1cm)
  arc[start angle=220, end angle=320, radius=1cm]
  -- cycle;
\filldraw[fill=blue!40] 
     (0:1cm) -- (0,0) -- (-60:1cm)
  arc[start angle=0, end angle=-60, radius=1cm]
  -- cycle;
\end{tikzpicture}

\end{document}

我明白了 在此处输入图片描述

答案1

这是一个自动化版本。定义一个新命令\sectorfill,以逗号分隔的列表作为输入,其中每个条目的形式为<percentage>/<color>。例如,

\sectorfill{25/blue,50/red,75/green,60/orange}

将创建 4 个扇区,其半径以百分比形式给出,并指定相应的颜色。TikZ 可以识别的任何颜色都可以(例如green!40!black)。

命令:

\sectorfill{25/blue,50/red,75/green,60/orange,17/yellow,92/purple,47/brown,81/black,53/green!40!black}

创建以下图像: 在此处输入图片描述

以下是代码:

\documentclass{article}

\usepackage{tikz}

\newcounter{nsect}
\newcommand{\sectorfill}[1]{\setcounter{nsect}{0}\begin{tikzpicture}[scale=.5, gray]
    \foreach \i in {1,...,10}{\draw (0,0) circle[radius=\i];}
    \foreach [var=\r, var=\c] in {#1}{\addtocounter{nsect}{1}}
    \foreach [var=\r, var=\c, count=\n, evaluate=\n as \t using 360/\value{nsect}] in {#1}{
    \draw(0,0)--(\n*\t:10);
    \draw[fill=\c, opacity=.7](0,0)--(\n*\t:\r/10) arc(\n*\t:(\n-1)*\t:\r/10)--cycle;
    }
    \end{tikzpicture}}

\begin{document}

\sectorfill{25/blue,50/red,75/green,60/orange,17/yellow,92/purple,47/brown,81/black,53/green!40!black}

\end{document}

答案2

这里有一个建议,或者更像是一个关于如何在 tikz 中绘制这个的概念证明。用于\foreach绘制基本结构和\filldraw着色。

\documentclass[border=3.14mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}
    \begin{tikzpicture} 
    
    %filling the cake
    \filldraw[opacity=0.5,fill=gray!10!white, draw=gray!10!white](0,0) -- (10mm,0mm) arc (0:360:10mm) -- cycle;
    \filldraw[fill=white, draw=white](0,0) -- (0.1mm,0mm) arc (0:360:0.1mm) -- cycle;
    
    \filldraw[opacity=0.5,fill=green!20!white, draw=none](0,0) -- (7mm,0mm) arc (0:45:7mm) -- cycle;    
    \filldraw[opacity=0.5,fill=red!20!white, draw=none](0,0) -- (6mm,0mm) arc (0:-45:6mm) -- cycle;
    
    \filldraw[opacity=0.5,fill=blue!20!white, draw=none](0,0) -- (-3mm,0mm) arc (0:-45:-3mm) -- cycle;
    \filldraw[opacity=0.5,fill=yellow!20!white, draw=none](0,0) -- (-8mm,0mm) arc (0:45:-8mm) -- cycle;
    
    \filldraw[opacity=0.5,fill=orange!20!white, draw=none] (0,0) -- (0,0.5) arc (90:45:0.5cm);
    \filldraw[opacity=0.5,fill=brown!20!white, draw=none] (0,0) -- (0,-0.5) arc (-90:-45:0.5cm);
    
    \filldraw[opacity=0.5,fill=black!20!white, draw=none] (0,0) -- (0,0.9) arc (90:135:0.9cm);
    \filldraw[opacity=0.5,fill=magenta!20!white, draw=none] (0,0) -- (0,-0.5) arc (-90:-135:0.5cm);


    
    %grid
    %rings
    \foreach \x in {0.2,0.4,0.6,0.8,1}
    \draw[line width=0.05mm,draw=white] (0,0) circle (\x cm);
    %lines
    \foreach \y in {0,45,90,135,180,225,270,315,360}    
    \draw[line width=0.05mm,draw=white] (0,0) -- (\y:1cm);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

无网格:

在此处输入图片描述

答案3

轮图我写的包,可以使用。

数据首先存储在宏中\WClist。这里,第一个值对应于尺寸,第二个值对应于颜色。

切片之间的间隙是通过键获得的gap

有 2 个轮图。第一个绘制切片。这里value=1使用键,以便每个切片的角度相同。外半径由中的第一个变量给出\WClist

在第二个轮图中,使用 键wheel data=Element \WCcount。宏\WCcount给出切片的当前编号。旋转取决于 给出的角度\WCmidangle。这是在 键中设置的wheel data style

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{wheelchart}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\sffamily
\def\WClist{%
  9/blue!50!black,
  6/blue,
  7/cyan,
  8/green,
  4/green!60!black,
  8/green!30!black,
  9/orange,
  7/orange!50!black,
  7/red,
  8/red!50!black%
}
\fill[gray!10] (0,0) circle[radius=11];
\wheelchart[
  data=,
  gap,
  radius={0}{\WCvarA},
  value=1
]{\WClist}
\wheelchart[
  data=,
  radius={10}{11},
  slices style={fill=none},
  value=1,
  wheel data=Element \WCcount,
  wheel data pos=0.5,
  wheel data style={
    darkgray,
    rotate={\WCmidangle<=180?\WCmidangle-90:\WCmidangle+90}
  }
]{\WClist}
\foreach\n in {1,...,11}{
  \draw[gray] (0,0) circle[radius=\n];
}
\foreach\n in {1,...,5}{
  \draw[gray] ({18+36*\n}:-11)--({18+36*\n}:11);
}
\end{tikzpicture}
\end{document}

答案4

这是我的答案。如果你能想出一些聪明的办法,请分享。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw circle (2cm);
\filldraw[fill=red!40] 
     (90:0.5cm) -- (0,0) -- (0:0.5cm)
  arc[start angle=0, end angle=90, radius=0.5cm]
  -- cycle;
\filldraw[fill=green!40] 
     (180:0.75cm) -- (0,0) -- (90:0.75cm)
  arc[start angle=90, end angle=180, radius=0.75cm]
  -- cycle;
\filldraw[fill=blue!40] 
     (270:1cm) -- (0,0) -- (180:1cm)
  arc[start angle=180, end angle=270, radius=1cm]
  -- cycle;
\filldraw[fill=yellow!40] 
     (360:1.5cm) -- (0,0) -- (270:1.5cm)
  arc[start angle=270, end angle=360, radius=1.5cm]
  -- cycle;

\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容