カラーバーの目盛りを手動でスケールする

カラーバーの目盛りを手動でスケールする

最近、手動で指定したコードを使用してカラーバーの目盛りを再スケールできないという奇妙なエラーが発生しました。

次の例を考えてみましょう。

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

出力

および目盛りxy1000 倍に縮小されます (たとえば、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}

出力

関連情報