在 pgfplots 中反转颜色图

在 pgfplots 中反转颜色图

我正在尝试获取给定颜色图的反转版本以用于绘图的颜色条中。

下面的代码专门针对黑白颜色图实现了这一点。但是,我正在寻找一种更通用的方法,只需反转颜色图的名称即可。

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[colorbar, colormap={}{ gray(0cm)=(1); gray(1cm)=(0);}]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[colorbar, colormap={}{ gray(0cm)=(0); gray(1cm)=(1);}]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

编辑

最新版本的 pgfplots 允许以更简单的形式回答问题,而无需诉诸自定义宏编码。以下是基于最新版本的答案pgfplots

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}

\begin{document}

\pgfplotsset{
    %colormap={X}{ gray(0cm)=(1); gray(1cm)=(0);},
    colormap/winter,
}
\begin{tikzpicture}
\begin{axis}[colorbar]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[colorbar,
    colormap={reverse winter}{
        indices of colormap={
            \pgfplotscolormaplastindexof{winter},...,0 of winter}
    },
]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\end{document}

有关此方法的详细信息可以在 pgfplots 手册的“基于其他颜色图构建颜色图”小节中找到。

在此处输入图片描述


这是原始答案

可以按如下方式编写这样的实用宏。

请注意,这不附带任何保证,即,如果内部结构有时发生变化,这将会损坏(尽管它们不太可能很快发生变化)。

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}

\makeatletter
\def\customrevertcolormap#1{%
    \pgfplotsarraycopy{pgfpl@cm@#1}\to{custom@COPY}%
    \c@pgf@counta=0
    \c@pgf@countb=\pgfplotsarraysizeof{custom@COPY}\relax
    \c@pgf@countd=\c@pgf@countb
    \advance\c@pgf@countd by-1 %
    \pgfutil@loop
    \ifnum\c@pgf@counta<\c@pgf@countb
        \pgfplotsarrayselect{\c@pgf@counta}\of{custom@COPY}\to\pgfplots@loc@TMPa
        \pgfplotsarrayletentry\c@pgf@countd\of{pgfpl@cm@#1}=\pgfplots@loc@TMPa
        \advance\c@pgf@counta by1 %
        \advance\c@pgf@countd by-1 %
    \pgfutil@repeat
%\pgfplots@colormap@showdebuginfofor{#1}%
}%

\makeatother

\begin{document}

\pgfplotsset{
    %colormap={X}{ gray(0cm)=(1); gray(1cm)=(0);},
    colormap/winter,
}
\begin{tikzpicture}
\begin{axis}[colorbar]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
%\customrevertcolormap{X}
%\customrevertcolormap{jet}
\customrevertcolormap{winter}
\begin{axis}[colorbar]
\addplot[mesh,thick] {x^2};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容