是否可以反转cycle list
中a 的顺序pgfplots
,如果可以,我该怎么做?
我正在使用该pgfplots
库colorbrewer
为带有四个图的图表着色。我之所以选择调色板,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
使用最浅的四种颜色。
以下是我想要的输出:pgfplots 按照相反的顺序遵循循环列表。它首先使用最暗的颜色进行绘图,然后使用较浅的颜色。
答案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}
答案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}