
Недавно я столкнулся со странной ошибкой, из-за которой мне не удалось изменить масштаб делений на цветовой шкале с помощью вручную указанного кода.
Рассмотрим следующий пример:
\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 раз (например, чтобы изменить префикс СИ), но не отображают масштаб, поскольку эта информация кодируется с единицей. Появление 'NaN' для цветовой шкалы, очевидно, нежелательно и должно быть исправлено, однако тот же код, который работает для осей, не работает для цветовой шкалы.
решение1
Причина, по которой масштабирование не работает в цветовой шкале, заключается в том, что есть два расширения аргументов. В TeX #1
ссылается на первый аргумент (или ничего, если нет первого аргумента), и намерение состоит в том, что #1
расширяется до номера тика.
Проблема здесь в том, что когда TeX определяет, что colorbar style
такое аргумент to, он выполняет первое расширение, и поскольку аргументов нет, \pgfmathparse{#1/1000}
расширяется до to \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}