通过名称或编号访问循环列表条目,而不是通过循环列表移位访问

通过名称或编号访问循环列表条目,而不是通过循环列表移位访问

pgfplots提供了便捷的功能cycle list,有助于在多个图中保持一致的线条样式。但是,我通常有不同的线条样式(假设某种重复的基础数据或方程式),这些线条样式相当随机。访问 with 的合适条目cycle list相当cycle list shift麻烦,如果我在图中增加或删除曲线,则需要手动更改。

我举了一个简单的例子。第一个图包含从线性到五阶的多项式,第二个图只包含奇数项(即第一个曲线图的任意子集)。

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

\begin{document}
% First axis, three types of plots
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,legend entries={1,...,5},legend pos=south east,
cycle list name=exotic,
]
\addplot {x};
\addplot {x^2};
\addplot {x^3};
\addplot {x^4};
\addplot {x^5};
\end{axis}
\end{tikzpicture}

% Second axis, only some type of plots (here: only odd polynomials)
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,legend entries={1,3,5},legend pos=south east,
cycle list name=exotic,
]
\addplot {x};
\pgfplotsset{cycle list shift=1}
\addplot {x^3};
\pgfplotsset{cycle list shift=2}
\addplot {x^5};
\end{axis}
\end{tikzpicture}
\end{document}

示例输出,循环列表的选择是任意的:

在此处输入图片描述

这里通过操纵数字实现了一致的线条样式cycle list shift。我更喜欢使用 样式的选项\addplot[cycle list entry=1],甚至使用自定义标签的解决方案\addplot[cycle list entry=linear]。我的问题是,这可以在 中完成吗pgfplots

我能想到的实现所需行为的唯一方法是手动方式,即定义包含所需绘图选项的宏作为

\pgfplotsset{%
  apply style/.code={%
    \tikzset{#1}%
  }
}
\def\linear{blue, dashed}

然后,可以将图添加为

\addplot[apply style/.expand once=\linear] {x};

我在手册中找不到这种功能pgfplots,但我认为它对许多用户来说可能有用。

答案1

到目前为止我发现的最佳方法与循环列表无关,而是定义自定义tikz样式。如果通过访问循环列表的第 n 个条目来定义样式,仍然可以增强它,但我不知道如何实现这一点。

定义自定义样式:

\tikzset{
  general/.style  = {thick,mark options={solid}},
  linear/.style   = {general,green,mark=+},
  quadratic/.style= {general,red,mark=x,},
  cubic/.style    = {general,blue,dashed,mark=square},
%...
}

使用它们:

\addplot[style=linear] {x};
\addplot[style=cubic] {x^3};
\addplot[style=quintic] {x^5};

而不是问题的相关部分,即

\addplot {x};
\pgfplotsset{cycle list shift=1}
\addplot {x^3};
\pgfplotsset{cycle list shift=2}
\addplot {x^5};

相关内容