
最近、手動で指定したコードを使用してカラーバーの目盛りを再スケールできないという奇妙なエラーが発生しました。
次の例を考えてみましょう。
\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
カラーバーでスケーリングが機能しない理由は、引数の展開が 2 つあるためです。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}