PGFPLOTS:在轴环境中插入图

PGFPLOTS:在轴环境中插入图

我知道如何使用块保存pics\tikzset{fig/.pic={code={...以及如何将它们插入tikzpictures。这在重用元素时非常方便。不幸的是,我不知道如何将这种方法应用于环境pgfplots内的元素axis

所需语法:

\begin{tikzpicture}
  \begin{axis}
    \pic{plot1};
  \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
  \begin{axis}
    \pic{plot1};
    \pic{plot2};
  \end{axis}
\end{tikzpicture}

其中plot1plot2是在同一文档的\addplot不同部分中重复使用的元素。这对于创建类似动画的文档非常有用(使用类中的选项,tikzpictures 会出现在单独的页面上)。我甚至可以创建循环。tikzpicturesclass=articlestandalone

可供参考的示例代码:

\documentclass[class=article,tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\pgfplotsset{%
  xmin=0,
  xmax=1,
  ymin=0,
  ymax=1,
  xlabel={$x$},
  ylabel={$y$},
}%

% PLOTS WITH THEIR AXES (NOT THE SYNTAX I WANT)
\tikzset{fig/.pic={code={%
      \begin{axis}
      \addplot [color=blue, domain=0:1] expression {x};
      \addplot [color=red, domain=0:1] expression {1-x};
      \end{axis}  
}}}%

% PLOTS WITHOUT THEIR AXES
% Inserted the scope in the hope that it would help
\tikzset{plot1/.pic={code={%
      \begin{scope}
      \addplot [color=blue, domain=0:1] expression {x};
      \end{scope}
}}}%
\tikzset{plot2/.pic={code={%
      \begin{scope}
      \addplot [color=red, domain=0:1] expression {1-x};
      \end{scope}
}}}%

\begin{document}

% DESIRED OUTPUT BUT NOT DESIRED SYNTAX:
\begin{tikzpicture}
    \pic{fig};
\end{tikzpicture}

% DESIRED SYNTAX BUT WILL FAIL:
\begin{tikzpicture}
  \begin{axis}
    \pic{plot1};
    \pic{plot2};
  \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

如果您愿意,您可以设置选项和/或将其放在\newcommand序言中。以下是我喜欢的方式:

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\newcommand{\plotI}{
\addplot [blue, domain=0:1] {x};
}
\newcommand{\plotII}{
\addplot [red, domain=0:1] {1-x};
}
\begin{axis}[
xmin=0, xmax=1,
ymin=0, ymax=1,
xlabel={$x$}, ylabel={$y$},
]
\plotI
\plotII
\end{axis}
\end{tikzpicture}
\end{document}

包含两条线的图形

编辑:

要在内部循环axis,您需要\pgfplotsinvokeforeach和朋友 - 而不是 -foreach请参阅手册 p.546

以下是一个例子:

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\newcommand{\plotI}[1]{
\addplot [#1, domain=0:1]  {rnd*x};
}
\newcommand{\plotII}{
\addplot [orange, domain=0:1]  {1-x};
}
\begin{axis}[
xmin=0, xmax=1,
ymin=0, ymax=1,
xlabel={$x$}, ylabel={$y$},
]
\pgfplotsinvokeforeach{red, green, blue}
{\plotI{#1}}
\plotII
\end{axis}
\end{tikzpicture}
\end{document}

包含线和三个随机图的图表

相关内容