我是 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}