我想知道是否有人可以给我指出一些好的资源,以了解 pgfplots 中的用户定义样式?我看过 pgfplots 手册,但它似乎只涉及这个主题。到目前为止,我已经能够定义一些自己的样式,并且可以毫无问题地调用它们,但我想扩展此功能,为此,我需要更多关于样式可以和不可以以及适当语法的详细信息。我的一些问题是:
问题 1:我可以定义嵌套样式吗?例如,我的序言定义 MyStyle1 如下:
\pgfplotsset{MyStyle1/.style={code-goes-here}}
然后我在我的文档中用如下方式调用此样式:
\begin{tikzpicture}
\begin{axis}[MyStyle1]
\addplot[MyStyleA] pseudo-code;
\end{axis}
\end{tikzpicture}
我想做的是,如果轴使用 MyStyle1,则 MyStyleA 有一个定义,如果轴使用 MyStyle2,则 MyStyleA 有一个不同的定义。可以这样做吗?我该怎么做?
Q2:如何覆盖样式的某些部分?假设 MyStyle1 包含行xmin=5
,我将 MyStyle1 应用于上述轴环境。我希望最小 x 值为 0,但使用 MyStyle1 中的所有其他设置。如何仅为此轴环境覆盖此功能(即不影响使用 MyStyle1 的任何其他内容)?
问题 3:样式中可以添加的内容有什么限制吗?我假设可以放在 [] 括号中的任何设置也可以放在样式中。此规则有任何例外或补充吗?
答案1
让我依次回答你们的问题。
Q1. 你绝对可以让一种风格定义另一种风格。手册中详细说明了你可以做什么tikz
。但这里有一个例子。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.15,
MyStyle1/.style={
MyStyleA/.style={red},
},
MyStyle2/.style={
MyStyleA/.style={blue},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[MyStyle1]
\addplot [
MyStyleA,
domain=-3e-3:3e-3,
samples=201,
]
{exp(-x^2 / (2e-3^2))/(1e-3*sqrt(2*pi))};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[MyStyle2]
\addplot [
MyStyleA,
domain=-3e-3:3e-3,
samples=201,
]
{exp(-x^2 / (2e-3^2))/(1e-3*sqrt(2*pi))};
\end{axis}
\end{tikzpicture}
\end{document}
如您所见,MyStyle1
定义MyStyleA
为red
,MyStyle2
定义MyStyleA
为blue
。 如果需要,您可以简单地使用Foo/.append style={...}
而不是 来附加样式Foo/.style={...}
。
值得指出的是,如果您这样做的原因是您希望将某种特定样式应用于每个图,那么您可以像这样使用,而不是MyStyleA
在每个图中设置并明确包含它。\addplot [MyStyleA]
every axis plot/.append style={...}
\pgfplotsset{
MyStyle1/.style={
every axis plot/.append style={red},
},
MyStyle2/.style={
every axis plot/.append style={blue},
},
}
\begin{axis}[MyStyle1]
\addplot [
domain=-3e-3:3e-3,
samples=201,
]
{exp(-x^2 / (2e-3^2))/(1e-3*sqrt(2*pi))};
\end{axis}
这与前面的代码效果相同。
Q2. 通常,较新的样式会覆盖较早的样式。因此,在这种情况下,您可以使用[MyStyle1, xmin=0]
。
Q3. 据我所知,你可以把任何东西放入可以放入可选参数/ \pgfset
/ \tikzset
/的样式中\pgfplotsset
。