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};