带或不带刻度标签的刻度生成 (DIN 461)

带或不带刻度标签的刻度生成 (DIN 461)

前段时间,我请求您帮助创建符合德国标准 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。我添加了一个移位来解决这个问题。这样您就可以将额外“刻度”的位置移动到您想要的任何位置,也就是说,如果您愿意,您也可以将其移动到第一个刻度和第二个刻度之间。

相关内容