我正在尝试将xtick scale label
(由 pgfkey 定义/pgfplots/xtick scale label code/.code
)放在 x 轴标签中,变量名称和单位之间。
我已尝试使用输入选项xlabel = {$ x $ (\pgfkeysvalueof{/pgfplots/xtick scale label code/.code} m)}
来执行,但是没有作用。
我也尝试了以下方法xtick scale label code/.code={\pgfkeyssetvalue{/pgfplots/xlabel}{#1}}
强制 PGFPlots 更改我的 xlabel,但效果不佳。
我知道我可以手动完成,但我对自动方法感兴趣。有没有解决方法或解决方案?
我的 MWE 是:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
scaled x ticks=true,
scaled y ticks = false,
y tick label style={/pgf/number format/fixed},
%xtick scale label code/.code={\pgfkeyssetvalue{/pgfplots/xlabel}{#1}},
xlabel = {$ x $ (\pgfkeysvalueof{/pgfplots/xtick scale label code/.code} m)},
ylabel = {$ y $},
]
\addplot[line width=3pt] coordinates {(0.0,0.0)(100,1)(400,2)(10000,0)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
看来最好的解决办法是删除xlabel
并改用xscale label
。我的解决方案如下:
\documentclass{文章} \使用包{pgfplots} \pgfplotsset{兼容=1.14} \开始{文档} \开始{tikzpicture} \开始{轴}[ 缩放 x 刻度=true, 缩放 y 刻度 = false, y 刻度标签样式={/pgf/数字格式/固定}, xtick 刻度标签代码/.code={$x$ $ ( 10^{#1}$ m)}, x标签 = {}, ylabel = {$y$}, ] \addplot[线宽=3pt] 坐标 {(0.0,0.0)(100,1)(400,2)(10000,0)}; \end{轴} \结束{tikzpicture} \结束{文档}
答案2
在这里我提出了一个解决方案,主要来自 Christian Feuersänger(PGFPlots 的作者),但他允许我在这里发布它。
(记录在案:我添加了一个功能要求到 PGFPlots Tracker 来实现一个更简单的界面。)
有关解决方案如何运作的更多详细信息,请查看代码中的注释。
% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
% use this `compat' level or higher to use the "advanced" placing of
% the axis labels
compat=1.3,
% create a new style to move the `tick scale label' to the axis labels
tick scale labels in axis labels/.code={
\pgfkeysgetvalue{/pgfplots/xtick scale label code/.@cmd}\temp
% remember the original value of 'xtick scale label code':
\pgfkeyslet{/pgfplots/xtick scale label code orig/.@cmd}\temp
%
\pgfkeysalso{
% simply remember the value in some global macro:
xtick scale label code/.code={
\gdef\xTickScale{##1}
},
% now, _modify_ any user-specified value of 'xlabel' by
% appending the tick scale label.
% In order to evaluate this modification AFTER the user
% wrote "xlabel={$x$}", we add it to 'every axis':
every axis/.append style={
% because we don't need the "binop" in this context just
% set it to nothing
tick scale binop={},
xlabel/.add = {}{
(\pgfplotsset{xtick scale label code orig=\xTickScale}\,m)
},
},
}
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
% activate/load the created style
tick scale labels in axis labels,
xlabel=$x$,
ylabel=$y$,
]
\addplot coordinates {
(0.0,0.0)(100,1)(400,2)(10000,0)
};
\end{axis}
\end{tikzpicture}
\end{document}