我怎样才能反转 pgfplots 中的循环列表?

我怎样才能反转 pgfplots 中的循环列表?

是否可以反转cycle list中a 的顺序pgfplots,如果可以,我该怎么做?

我正在使用该pgfplotscolorbrewer为带有四个图的图表着色。我之所以选择调色板,OrRd是因为它有一个四色调色板,colorbrewer网站表示它是色盲和复印安全的。调色板包括一种非常浅的颜色,在图表的白色背景下很难看清。我想使用五六种调色板中最暗的四种颜色OrRd,但如果我将其中一个调色板设置为活动循环列表,它们会首先使用较浅的颜色。我想发出命令来反转循环列表的顺序,以便第一个图使用最暗的颜色,然后后面的图使用较浅的颜色。

这是一个最小的工作示例(改编自下面 Stefan Pinnow 的回答):

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{colorbrewer}
    \pgfplotsset{
    compat=1.16, cycle list/OrRd-6,}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        samples=2,
    ]
        \foreach \i in {1,...,4} {
            \addplot+ [very thick] {\i};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

上述代码的输出如下:pgfplots 按照循环列表顺序绘制线条,先绘制浅色线条,再绘制深色线条。在本例中,OrRd-6使用最浅的四种颜色。

Results of above code

以下是我想要的输出:pgfplots 按照相反的顺序遵循循环列表。它首先使用最暗的颜色进行绘图,然后使用较浅的颜色。

Desired output

答案1

得益于 PGFPlots v1.14 中新引入的命令,反转 a 的颜色colormap非常容易。剩下要做的就是将反转的颜色映射colormap到 a cycle list

有关详细信息,请查看代码中的注释。

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{colorbrewer}
    \pgfplotsset{
        % load the `cycle list' or `colormap' that contains the colors you want to use
        cycle list/OrRd-6,
        % define own `cycle list' by first creating a custom `colormap' where
        % the colors are reversed ...
        colormap={OrRd-6-reversed}{
            indices of colormap=(
                \pgfplotscolormaplastindexof{OrRd-6},...,0 of OrRd-6
            )
        },
        % ... which then is mapped to a `cycle list'
        cycle list/.define={OrRd-6-reversed}{[of colormap=OrRd-6-reversed]},
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        % use the custom `cycle list'
        cycle list name=OrRd-6-reversed,
        samples=2,
    ]
        \foreach \i in {1,...,4} {
            \addplot+ [very thick] {\i};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

image showing the result of above code

答案2

Stefan Pinnow 的解决方案实现了预期结果,并提供了一种真正反转循环列表的方法,因此它回答了这个问题。但是,我更愿意尽量减少用于实现预期结果的命令数量,因此我发布了我的解决方案,一些用户可能更喜欢它,因为它只需要一个额外的命令。

我可以通过将键设置为 -(循环列表长度 - 1)来获得所需的输出。这种方法很容易实现,但必须为每个循环列表定制cycle list shift值。cycle list shift

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{colorbrewer}
        \pgfplotsset{
    compat=1.16, cycle list/OrRd-6,}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        samples=2,
        cycle list shift=-5
    ]
        \foreach \i in {1,...,4} {
            \addplot+ [very thick] {\i};
        }
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容