我试图并排三个伪彩色子图,一个颜色条用于子图#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(尽管我已经看到了一个后端依赖的问题,除非你与绘图交互,否则它不会一直更新),但有没有办法链接颜色限制两个子图,所以一个颜色条可以描述两个图?
更新:为了澄清,我正在寻找能够在创建情节后重新调整攀爬的能力。
答案 0 :(得分:0)
在您使用通用颜色条显示数据的轴的vmin
调用中指定vmax
和pcolormesh
。
在你的情况下:
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
已更新一次,因此您可以轻松地将其替换为该调用。