手动缩放颜色栏上的刻度

手动缩放颜色栏上的刻度

最近,我遇到了一个奇怪的错误,它不允许我使用手动指定的代码重新缩放颜色条上的刻度。

请考虑以下示例:

\documentclass[tikz,border=10pt]{standalone}

\usepackage{pgfplots}

\pgfplotsset{
  colormap/viridis,
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      domain=1e3:10e3,
      scaled x ticks=manual:{}{\pgfmathparse{#1/1000}},
      scaled y ticks=manual:{}{\pgfmathparse{#1/1000}},
      colorbar,
      colorbar style={
        scaled y ticks=manual:{}{\pgfmathparse{#1/1000}},
      },
    ]
    \addplot [mesh,ultra thick] {x};
  \end{axis}
\end{tikzpicture}
\end{document}

输出

x和刻度y按 1000 倍缩小(例如更改 SI 前缀),但不显示缩放比例,因为该信息是用单位编码的。颜色条出现“NaN”显然是不希望的,应该修复,但适用于轴的相同代码不适用于颜色条。

答案1

缩放在颜色栏中不起作用的原因是参数有两个扩展。在 TeX 中,#1指的是第一个参数(如果没有第一个参数,则什么也没有),而目的是#1扩展到刻度数。

这里的问题是,当 TeX 发现参数是什么时colorbar style,它会进行第一次扩展,由于没有参数,因此\pgfmathparse{#1/1000}扩展为\pgfmathparse{/1000}无效的 NaN。

为了解决这个问题,必须将缩放比例指定为\pgfmathparse{##1/1000}。在上述有问题的扩展过程中,这会\pgfmathparse{#1/1000}根据需要扩展为 ,然后可以使用它来正确缩放颜色条的刻度:

\documentclass[tikz,border=10pt]{standalone}

\usepackage{pgfplots}

\pgfplotsset{
  colormap/viridis,
}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      domain=1e3:10e3,
      scaled x ticks=manual:{}{\pgfmathparse{#1/1000}},
      scaled y ticks=manual:{}{\pgfmathparse{#1/1000}},
      colorbar,
      colorbar style={
        scaled y ticks=manual:{}{\pgfmathparse{##1/1000}},
      },
    ]
    \addplot [mesh,ultra thick] {x};
  \end{axis}
\end{tikzpicture}
\end{document}

输出

相关内容