我正在使用以下代码使用 TikZ 绘制螺旋。
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
\end{tikzpicture}
\end{document}
我想在同一个tikzpicture
环境中绘制两个螺旋,一个在另一个的右侧。我不知道如何设置 的坐标polaraxis
。我发现此页面位于 tikz.dev其中提供了一些示例polaraxis
,但我无法找到polaraxis
在同一tikzpicture
环境中绘制两个的示例。
我知道可以通过重复相同的tikzpicture
环境将一个螺旋绘制在另一个螺旋的右侧(如下所示),但我想避免这样做,因为在我的原始文档中,我在同一页上绘制了 30 多个螺旋,并且多个tikzpicture
环境会增加不必要的代码行。
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\begin{document}
\begin{tikzpicture}
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
\end{tikzpicture}
\end{document}
简单来说,我想要一个tikzpicture
包含多个螺旋的单一环境。螺旋不一定非要使用polaraxis
。在上面的例子中,我使用了,polaraxis
因为我发现它对于绘制螺旋很方便。
我正在寻找的结果
下图是使用 Inkscape 创建的。它显示了我尝试使用 TikZ 创建的布局。
答案1
有多种方法可以做到这一点。最好的选择在某种程度上取决于你到底在做什么。例如,你的螺旋线是否都是相同的,还是只是为了举例?如果不是,它们是否使用相同的polaraxis
?根据您的回答,我给出了三种方法。重点不在于这些方法给出不同的输出 - 如果它们确实如此,那是偶然的,完全没有必要 - 而是第二种方法避免了不必要的重复代码,第三种方法也避免了不必要地重新编译重复的代码。(TikZ 很棒,但它慢!
请注意,由于 Okular/KDE 更新,我现在粘贴的图像存在问题。抱歉,质量不佳。
情况1
如果你的螺旋在轴配置上会有所不同,你可以这样做:
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
\scoped[xshift=20mm]{%
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
}
\end{tikzpicture}
案例 2
如果函数发生变化,但轴配置保持不变,则可以使用类似这样的方法
\pgfplotsset{%
spiral axis/.style={%
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3,
},
}
\NewDocumentCommand \makespiral { O{} m }{%
\scoped[#1]{\begin{polaraxis}[spiral axis]\addplot+(#2);\end{polaraxis}}%
}
\begin{tikzpicture}
\makespiral{4*180*x,x}
\makespiral[xshift=20mm]{4*180*x,x}
\end{tikzpicture}
在哪里\makespiral[<optional scope configuration>]{function/variable to plot}
。
案例 3
如果你确实需要 30 个相同的螺旋(或目标图像中的 81 个),我会先将螺旋保存到一个盒子中,然后使用它 30(或 81)次。例如,
\newsavebox \spiralbox
\sbox \spiralbox {%
\tikz{%
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}%
}%
}
\begin{tikzpicture}
\foreach \i in {0,20,40,60,80,100}
\foreach \j in {0,20,40,60,80}
\node [anchor=north west] at (\i mm,\j mm) {\usebox\spiralbox};
\end{tikzpicture}
由于这仅编译一次图,因此比每次重复螺旋时重复相同的计算效率更高。例如,这与tikzsymbols
避免不必要地减慢编译速度的方法相同。
完整代码
\documentclass{article}
% ateb: https://tex.stackexchange.com/a/713114/ addaswyd o gwestion rdrg109: https://tex.stackexchange.com/q/713109/
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\pgfplotsset{%
compat=1.18,
spiral axis/.style={%
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3,
},
}
\NewDocumentCommand \makespiral { O{} m }{%
\scoped[#1]{\begin{polaraxis}[spiral axis]\addplot+(#2);\end{polaraxis}}%
}
\newsavebox \spiralbox
\sbox \spiralbox {%
\tikz{%
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}%
}%
}
\begin{document}
Case 1:
\begin{tikzpicture}
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
\scoped[xshift=20mm]{%
\begin{polaraxis}[
width = 100pt,
height = 100pt,
axis lines = none,
no marks,
samples = 200,
smooth,
domain = 0:3
]
\addplot+(4*180*x,x);
\end{polaraxis}
}
\end{tikzpicture}
Case 2:
\begin{tikzpicture}
\makespiral{4*180*x,x}
\makespiral[xshift=20mm]{4*180*x,x}
\end{tikzpicture}
Case 3:
\begin{tikzpicture}
\foreach \i in {0,20,40,60,80,100}
\foreach \j in {0,20,40,60,80}
\node [anchor=north west] at (\i mm,\j mm) {\usebox\spiralbox};
\end{tikzpicture}
\end{document}
您也可以选择\spiralbox
不使用tikzpicture
,但如果你已经熟悉 TikZ,这种方法可能是最简单的。
答案2
我用来
pic
储存螺旋我使用 2 个嵌套循环(行、列)来重现此图片
为了使它们彼此相邻,我用以下代码初始化标记
\begin{tikzpicture}[x=50pt,y=50pt]
\documentclass[border=5mm]{standalone} \usepackage{pgfplots} \usepgfplotslibrary{polar} \tikzset{spiral/.pic={ \begin{polaraxis}[ width = 100pt, height = 100pt, axis lines = none, no marks, samples = 200, smooth, domain = 0:3 ] \addplot+(4*180*x,x); \end{polaraxis} }} \ExplSyntaxOn \NewDocumentCommand{\spiral}{m m} { \begin{tikzpicture}[x=50pt,y=50pt] \int_step_inline:nn {#1} { \int_step_inline:nn {#2} { \pic at (####1,##1){spiral}; %\node at (####1,##1){####1,##1}; } } \end{tikzpicture} } \ExplSyntaxOff \begin{document} \spiral{6}{9} \end{document}