我正在寻找的结果

我正在寻找的结果

我正在使用以下代码使用 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}
    

在此处输入图片描述

相关内容