pgfplots - 用户定义样式的轴 xmode/ymode

pgfplots - 用户定义样式的轴 xmode/ymode

我想用 \pgfplotsset 为轴指定 xmode 和 ymode(或任何其他方式,以便可以通过 if 语句更改模式)我收到的错误消息是:

! Package pgfplots Error: Sorry, you can't change `/pgfplots/xmode' in this con
text. Maybe you need to provide it as \begin{axis}[/pgfplots/xmode=...] ?.

这是一个最小的工作示例:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}

\def\someoption{1} % change this to zero to see the error

\ifcase\someoption % this is the reason why I want to define xmode with styles
\pgfplotsset{/pgfplots/mystyle/.style={
                 /pgfplots/xmode=log, % this is not working
                 /pgfplots/ymode=log % this too
                }}
\else
\pgfplotsset{/pgfplots/mystyle/.style={}}
\fi

\begin{document}

\section*{with style: (not working)}

\begin{tikzpicture}
\begin{axis}[/pgfplots/mystyle]
\addplot coordinates {(10, 100) (100, 15) (2000, 200)};
\end{axis}
\end{tikzpicture}

% how it should look like

\section*{with hard-coded axis properties:}

\begin{tikzpicture}
\begin{axis}[xmode=log,ymode=log]
\addplot coordinates {(10, 100) (100, 15) (2000, 200)};
\end{axis}
\end{tikzpicture}

\end{document}

这与用户定义样式的轴限值,但在这种情况下这没有帮助。

答案1

您遇到了 pgfplots 的内部限制 - 这就是它声称您无法在上下文中更改密钥的原因(这不是错误,而是功能)。

原因是键过滤:pgfplots首先从输入参数列表中提取xmode和键,以决定应激活哪个默认配置集(等)。为此,它仅设置属于键系列的选项。如果没有此限制,键可能会在错误的上下文中设置。ymodeevery loglog axis/pgfplots/scale

如果你能确保你的风格mystyle只包含xmodeand/or ymode,那么你可以使用以下方法解决问题

\ifcase\someoption % this is the reason why I want to define xmode with styles
\pgfplotsset{/pgfplots/mystyle/.style={
                 /pgfplots/xmode=log, % this is not working
                 /pgfplots/ymode=log % this too
                },
       mystyle/.belongs to family=/pgfplots/scale,% <----
}
\else
\pgfplotsset{/pgfplots/mystyle/.style={}}
\fi

如果您的样式设置的不止这些,那么您至少应该确保它只包含对其他样式的更改(如ticklabel style={...})。

手册中没有记录这一点。我不确定是否应该记录。

答案2

您可以将其提供给 TikZ 图片而不是轴。但看到这不起作用确实很奇怪。可能是由于处理问题,\pgfkeys但我找不到问题所在。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{mystyle/.style={/pgfplots/xmode=log,/pgfplots/ymode=log}}

\begin{document}
\begin{tikzpicture}[every axis/.style={/pgfplots/mystyle}]
\begin{axis}
\addplot coordinates {(10, 100) (100, 15) (2000, 200)};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容