前段时间,我请求您帮助创建符合德国标准 DIN 461 的轴标签(我以前的问题)感谢 Jake 的精彩回答,在大多数情况下,这个方法都很有效!
我最近遇到了一个问题,轴在轴刻度的帮助下“自动缩放”。但是,在这种情况下,上述方法效果不佳 - 更确切地说,根本不起作用。
这里,采用上述解决方案的示例代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{siunitx}
\usetikzlibrary{calc}
\pgfplotsset{
din xlabel/.style={
xticklabel style={
name=label\ticknum,
append after command=\pgfextra{\xdef\lastticknum{\ticknum}}
},
after end axis/.code={
\pgfmathparse{int(\lastticknum-1)}
\path (label\lastticknum.base) -- (label\pgfmathresult.base) node [midway, anchor=base] {#1};
}
}
}
\begin{document}
% === That one is working ===
\begin{tikzpicture}
\begin{axis}[din xlabel=\si{\celsius}]
\addplot table {
0 1
2 1
3 2
4 3
};
\end{axis}
\end{tikzpicture}
% === This one not ===
\begin{tikzpicture}
\begin{axis}[din xlabel=\si{\celsius}, xtick = data]
\addplot table {
0.001 1
0.002 1
0.003 2
0.004 3
};
\end{axis}
\end{tikzpicture}
\end{document}
结果:
以及相应的错误: Undefined control sequence. label\ticknum
显然,ticknum 变量未定义或无法访问。不幸的是,我不太了解轴和刻度是如何生成的。如果有人能解释为什么带刻度的轴与“正常”轴的处理方式不同,那就太好了。解决方案(或方法)也值得赞赏。;-)
提前致谢!
答案1
事实证明,\ticknum
未针对缩放刻度进行定义。因此,除非准备重新定义包含在中的宏pgfplotsticks.code.tex
,否则可以使用新的计数器。
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{siunitx}
\newcounter{mytick}
\usetikzlibrary{calc}
\pgfplotsset{
din xlabel/.style={
execute at begin axis=\setcounter{mytick}{0},
xticklabel style={
/utils/exec=\stepcounter{mytick},
name=label\number\value{mytick},
},
after end axis/.code={
\path (label\the\numexpr\value{mytick}
+\pgfkeysvalueof{/pgfplots/din xlabel shift}.base)
-- (label\the\numexpr\value{mytick}
+\pgfkeysvalueof{/pgfplots/din xlabel shift}-1.base) node [midway, anchor=base] {#1};
}
},din xlabel shift/.initial=0
}
\begin{document}
% === That one is working ===
\begin{tikzpicture}
\begin{axis}[din xlabel=\si{\celsius}]
\addplot table {
0 1
2 1
3 2
4 3
};
\end{axis}
\end{tikzpicture}
% === This one works now as well ===
\begin{tikzpicture}
\begin{axis}[din xlabel=\si{\celsius}, xtick = data,din xlabel shift=-1]
\addplot table {
0.001 1
0.002 1
0.003 2
0.004 3
};
\end{axis}
\end{tikzpicture}
\end{document}
事实证明,比例因子会使刻度数增加 1。我添加了一个移位来解决这个问题。这样您就可以将额外“刻度”的位置移动到您想要的任何位置,也就是说,如果您愿意,您也可以将其移动到第一个刻度和第二个刻度之间。