色條上的手動縮放刻度

色條上的手動縮放刻度

最近,我遇到了一個奇怪的錯誤,它不允許我使用手動指定的程式碼重新縮放色條上的刻度。

考慮以下範例:

\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}

輸出

相關內容