我想在 tikz 中绘制以下图像:
我不知道从哪里开始。我想也许可以有一个三角形的节点,然后将其放置在不同的地方。
我从这个开始:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\node[fill=white,shape=circle,draw=black, minimum size=4cm] (A) at (0,4.3) {A};
\node[fill=white,shape=circle,draw=black, minimum size=3cm] (A) at (0,3.2) {A};
\node[fill=white,shape=circle,draw=black, minimum size=2cm] (A) at (0,2.1) {A};
\node[fill=white,shape=circle,draw=black, minimum size=1cm] (A) at (0,1.1) {A};
\end{tikzpicture}
\end{document}
有几件事:
我想过将圆形改为三角形,但是当我把“圆形”改成“三角形”时,它不起作用——即使我使用了形状库。
我希望字母 A 出现在形状上方,而不是中间。
我想要一条波浪线连接所有形状的顶部。任何波浪线都可以。
答案1
我将使用 定义一个三角形“节点” pic
(参见 tikz 手册第 18.2 节,版本 3.0.1a)。对于 MWE,我们需要指定三角形的高度和标签,因此需要pic
接受两个参数。一种方法是将“三角形”定义pic
为:
\tikzset{
pics/triangle/.style args ={#1,#2}{% pic=triangle{label, height}
code = {
\draw(0,0)node[left]{$#1$} -- ++(#2/2,-#2) -- ++(-#2,0) -- cycle;
}
}
}
这只是tikz
您“调用”时放置的“普通”代码pic
。因此,例如,有了它,您可以绘制一个高度为的三角形3
并添加标签S
:
\begin{tikzpicture}
\pic at (0,3) {triangle={S,3}};
\end{tikzpicture}
还有其他几种“绘制” 的方法pics
。例如,您也可以使用 绘制此三角形\draw(0,3)pic{triangle={S,3}};
。
绘制“波浪线”的最简单方法可能是使用“蛇形装饰”——请参阅手册第 48.3 节。
把所有这些放在一起,你就可以生成图表
使用代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, decorations.pathmorphing}
\begin{document}
\tikzset{
triangle/.style = {draw=black, fill=brown!5, thick},
squiggle/.style = {decoration={snake, segment length=5mm}, decorate},
pics/triangle/.style args ={#1,#2}{% pic=triangle{label, height}
code = {
\draw[triangle] (0,0)node[left]{$#1$} -- ++(#2/2,-#2) -- ++(-#2,0) -- cycle;
}
}
}
\begin{tikzpicture}
\pic at (0,3) {triangle={S,3}};
\pic at (0,2) {triangle={P,2}};
\pic at (0,1) {triangle={P,1}};
\draw[squiggle](0,2) -- (0,3);
\draw[squiggle](0,1) -- (0,2);
\draw[-{Latex[open]}] (2,1.5) -- ++(2,0);% using arrows.meta
\pic at (6,3) {triangle={S,3}};
\pic at (6,2) {triangle={P,2}};
\pic at (6,1) {triangle={P,2}};
\pic at (6,0) {triangle={P,2}};
\pic at (6,-1.5) {triangle={P,0.5}};
\foreach \bot/\y in {-1.5/1.5, 0/1, 1/1, 2/1} {
\draw[squiggle](6,\bot) -- ++(0,\y);
}
\end{tikzpicture}
\end{document}
部分是为了展示如何做,部分是为了微调图表(特别segment length
是蛇),我添加了一些样式。
答案2
您将所有节点称为A
,这可能不是您想要的,并且您可能使用多边形而不是三角形。在节点顶部放置标签可以通过 来实现label=above:
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\node[fill=white,shape=regular polygon,regular polygon sides=3,draw=black,
minimum size=4cm,label=above:A,anchor=south] (A1) at (0,4.3) {};
\node[fill=white,shape=regular polygon,regular polygon sides=3,draw=black,
minimum size=3cm,label=above:A,anchor=south] (A2) at (0,3.2) [above]{};
\node[fill=white,shape=regular polygon,regular polygon sides=3,draw=black,
minimum size=2cm,label=above:A,anchor=south] (A3) at (0,2.1) [above]{};
\node[fill=white,shape=regular polygon,regular polygon sides=3,draw=black,
minimum size=1cm,label=above:A,anchor=south] (A4) at (0,1.1) [above]{};
\end{tikzpicture}
\end{document}
现在你可以使用坐标了。如果你总是用不同的比例绘制相同的东西,你可以考虑使用scope
。