如何为 pgfplots 轴环境定义 pgfkeys?

如何为 pgfplots 轴环境定义 pgfkeys?

我正在尝试编写一个允许向pgfplots axes环境中添加其他环境的函数。

我想到了以下例子:

\documentclass{standalone}
\usepackage{pgfkeys}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\pgfkeys{
  /myPlot/.is family, /myPlot/.cd,
  default/.style={
    axis={},
    plot={},
  },
  axisCommands/.style={},
  axis/.style={axisCommands/.style={#1}},
  plotCommands/.style={},
  plot/.style={plotCommands/.style={#1}},
}
% 
\newcommand\Example[1][]{
    \pgfkeys{/myPlot, default, #1}
    \begin{tikzpicture}[]
    \begin{axis}[/myPlot/axisCommands/.try]
    \addplot[domain=0:1,samples=10, /myPlot/plotCommands/.try] {x};
    \end{axis}
    \end{tikzpicture}
}
% 
\begin{document}
\Example[axis={/pgfplots/xlabel=x, /pgfplots/ylabel=y}, plot={blue}]{}
\end{document}

如您所见,我能够将“axis”和“plot”定义为键。但是,axis 环境前面必须有“/pgfplots/”。我想在 newcommand 环境中设置它们,但到目前为止我还无法这样做。当我删除它时,它会显示错误消息

我不知道你传递的“x”的键“/tikz/xlabel”

有人对这个问题有解释和/或解决方案吗?

答案1

要摆脱用法axis={/pgfplots/xlabel=x, /pgfplots/ylabel=y},你只需要将默认路径更改为/pgfplots/内部

axis/.style={axisCommands/.style={#1}},
% and
plot/.style={plotCommands/.style={#1}},

一个棘手的细节:

  • \addplot[] ...;重置绘图的默认样式,因此不会绘制标记(蓝色实心圆),并且蓝色将重置为黑色。要将样式附加到默认样式,\addplot+请使用以下示例。

完整示例:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\pgfkeys{
  /myPlot/.is family, /myPlot/.cd,
  default/.style={
    axis={},
    plot={},
  },
  axisCommands/.style={},
  axis/.style={axisCommands/.style={/pgfplots/.cd, #1}},
  plotCommands/.style={},
  plot/.style={plotCommands/.style={/pgfplots/.cd, #1}},
}

\newcommand\Example[1][]{
  \pgfkeys{/myPlot, default, #1}
  \begin{tikzpicture}[]
    \begin{axis}[/myPlot/axisCommands/.try]
      \addplot+[domain=0:1, samples=10, /myPlot/plotCommands/.try] {x};
    \end{axis}
  \end{tikzpicture}
}
 
\begin{document}
\Example[%
  axis={xlabel=x, ylabel=y},
  % comment the following line to restore to default style (in blue)
  plot={orange, mark options={orange}}
]{}
\end{document}

在此处输入图片描述

相关内容