我想将两个表面图与groupplots
库组合在一起pgfplots
,并从第一个图的顶部到图的底部放置一个公共颜色条。
目前(下面的代码),两个图都有自己的颜色条,这不是我想要的。
我知道,有可能把 放进去colorbar to name
。但这会把情节和颜色条分开,也不是我想要的。我想到的第二件事是把颜色条放在 中group style
。但那里pgfplots
抱怨说它不知道关键点。
那么,如何创建这样的颜色条?
下面的代码显示了这个问题。
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=newest}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[view={0}{90},
xlabel=$x$,
ylabel=$y$,
colorbar right, % This creates a colorbar next to each plot.
group/xlabels at = edge bottom,
group style = {group size = 1 by 2,
xlabels at = edge bottom
}]
\nextgroupplot
\addplot3[surf] {sin(36*x)};
\nextgroupplot
\addplot3[surf] {cos(36*y)};
\end{groupplot}
\end{tikzpicture}
\end{document}
答案1
您只需调整color bar
图的高度。
这可以通过以下方式轻松实现:
every colorbar/.append style={height=<height specification>}
但是,通常你会对不同的组图使用不同的高度。因此,更通用的方法是:
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}
}
第一个键/pgfplots/parent axis height
是实际轮廓图的高度(其中附加了颜色条)。
第二个关键/pgfplots/group/vertical sep
是两组地块之间的间距。这需要根据较低地块的数量进行调整,在本例中只有一个。
因此,上述方法使颜色条图的高度等于 2 个图加上图的垂直间隔。此外,如果您更改高度和垂直间隔等,则它是通用的。但是,请注意,如果图的高度不同,则上述方法将不是工作。
好的,有一件事是你只需要绘制一次颜色条。组图确保环境中的每个语句groupplot
都将添加到每个子图中。因此你只需要将颜色条放在顶部\nextgroupplot
。颜色条与父轴的右上角对齐,因此您应该对顶部图执行此操作。
所以:
\nextgroupplot[colorbar right,
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}}]
一件值得做的事非常将颜色条附加到多个轮廓时要注意确保轮廓的边界对于两者是相同的,因此我建议您也添加point meta min=<value>
和point meta max=<value>
。 请记住这一点! :)
好的,最终结果groupplots
是这样的:
\begin{tikzpicture}
\begin{groupplot}[view={0}{90},
xlabel=$x$,
ylabel=$y$,
height=3cm,
point meta min=-1.5,
point meta max=1.5,
group/xlabels at = edge bottom,
group style = {group size = 1 by 2,
xlabels at = edge bottom
}]
\nextgroupplot[colorbar right,
every colorbar/.append style={height=
2*\pgfkeysvalueof{/pgfplots/parent axis height}+
\pgfkeysvalueof{/pgfplots/group/vertical sep}}]
\addplot3[surf] {sin(36*x)};
\nextgroupplot
\addplot3[surf] {cos(36*y)};
\end{groupplot}
\end{tikzpicture}
这将导致: