
最近,我遇到了一個奇怪的錯誤,它不允許我使用手動指定的程式碼重新縮放色條上的刻度。
考慮以下範例:
\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}