Manuell skalierte Markierungen auf der Farbleiste

Manuell skalierte Markierungen auf der Farbleiste

Kürzlich ist mir ein merkwürdiger Fehler begegnet, der es mir nicht erlaubte, die Markierungen auf der Farbleiste mit einem manuell angegebenen Code neu zu skalieren.

Betrachten Sie das folgende Beispiel:

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

Ausgabe

Die xund yTicks werden um den Faktor 1000 verkleinert (um beispielsweise das SI-Präfix zu ändern), die Skalierung wird jedoch nicht angezeigt, da diese Informationen mit der Einheit codiert sind. Das Auftreten von „NaN“ für die Farbleiste ist offensichtlich nicht erwünscht und sollte behoben werden, doch derselbe Code, der für die Achsen funktioniert, funktioniert nicht für die Farbleiste.

Antwort1

Der Grund, warum die Skalierung in der Farbleiste nicht funktioniert, liegt darin, dass es zwei Erweiterungen der Argumente gibt. In TeX #1bezieht sich auf das erste Argument (oder auf nichts, wenn es kein erstes Argument gibt) und die Absicht ist, dass #1auf die Tick-Nummer erweitert wird.

Das Problem hierbei besteht darin, dass TeX, wenn es das Argument „to“ ermittelt colorbar style, eine erste Erweiterung durchführt, und da kein Argument vorhanden ist, \pgfmathparse{#1/1000}wird „to“ erweitert \pgfmathparse{/1000}, was ungültig ist, daher der NaN.

Um dies zu beheben, muss die Skalierung als angegeben werden \pgfmathparse{##1/1000}. Bei der oben beschriebenen problematischen Erweiterung wird dies wie \pgfmathparse{#1/1000}gewünscht erweitert und kann dann verwendet werden, um die Markierungen der Farbleiste korrekt zu skalieren:

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

Ausgabe

verwandte Informationen