如何在Matplotlib中的子图中添加常用颜色条并将它们的限制一起更改

时间:2016-05-23 21:32:18

标签: python matplotlib subplot colormap

我试图并排三个伪彩色子图,一个颜色条用于子图#1和#2,另一个颜色条用于#3。我也喜欢设置颜色限制(攀爬),因此前两个颜色限制相同(因此第一个颜色条将反映子图#1和#2的值)。

这是我到目前为止所拥有的:

import numpy as np
import matplotlib.pyplot as plt
plt.ion()
import matplotlib as mpl


data1 = np.random.random((10,10))
data2 = 2.*np.random.random((10,10))
data3 = 3.*np.random.random((10,10))


f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True)

imgplot1 = ax1.pcolormesh(data1, edgecolors='None')

imgplot2 = ax2.pcolormesh(data2, edgecolors='None')

plt.subplots_adjust(hspace=0.1, wspace=0.1)
cax2, kw = mpl.colorbar.make_axes([ax1, ax2])
plt.colorbar(imgplot2, cax=cax2, **kw)
imgplot2.set_clim(0,20)

imgplot3 = ax3.pcolormesh(data3, edgecolors='None')
cax3, kw = mpl.colorbar.make_axes([ax3])
plt.colorbar(imgplot3, cax=cax3, **kw)

imgplot2.set_clim(0,20)设置子图#2(尽管我已经看到了一个后端依赖的问题,除非你与绘图交互,否则它不会一直更新),但有没有办法链接颜色限制两个子图,所以一个颜色条可以描述两个图?

更新:为了澄清,我正在寻找能够在创建情节后重新调整攀爬的能力。

1 个答案:

答案 0 :(得分:0)

在您使用通用颜色条显示数据的轴的vmin调用中指定vmaxpcolormesh

在你的情况下:

opts = {'vmin': 0, 'vmax': 20, 'edgecolors': 'none'}
imgplot1 = ax1.pcolormesh(data1, **opts)
imgplot2 = ax2.pcolormesh(data2, **opts)

然后摆脱对imgplot2.set_clim(0,20)的号召。 或者,您也可以使用相同的参数在set_clim上调用imgplot1。它会产生同样的效果。

在此答案下面继续发表您的评论,您可以通过调用更新两个轴imgplot2.set_clim的自定义函数轻松替换您对clim的单个调用:

def update_clims(vmin, vmax, axes):
    for ax in axes:
        ax.set_clim(vmin, vmax)

如果您真的想要,可以重新绑定set_clim类的Axes方法以执行上述功能,前提是您添加了具有共享z数据的轴列表。但对于其他易于实现的功能来说,这似乎是很多工作。由于您已经在一个轴上调用clim已更新一次,因此您可以轻松地将其替换为该调用。