在同一颜色条上映射两个子图

我在将具有不同范围 (8.53,9.09) 和 (9.55,10.83) 的两个直方图子图映射到一个颜色条时遇到问题。但是颜色条是使用第一个或第二个子图中的 pcolormesh 绘制的,并且因为它们没有重叠,颜色条不能显示正确的颜色。


#first histogram subplot


binx=np.linspace(9.1,11.35,20)

biny=np.linspace(-1.45,0.8,20)

median=np.random.uniform(9.55,10.83, size=(20,20))

#finding min and max values of median

dim=np.size(median)

median1=np.reshape(median, (dim, ))

median1=median1[median1!=0]

vmin1=np.sort(median1)[0]

vmax1=np.sort(median1)[-1]  



hist1=ax1.pcolormesh(binx, biny, median.T, norm=LogNorm(), cmap='viridis')

hist1.set_clim(vmin1,vmax1)


#the second subplot histogram

man_mass=np.linspace(9.1,11.35,16)

man_sfr=np.linspace(-1.45,0.8,16)


man_med=np.array([[0.,0.,0.,0.,0.,0.,0.,8.56,0.,0.,0.,0.,0.,0.,0.,0.],

                 [0.,0.,0.,0.,0.,8.7,8.7,8.65,8.58,8.53,0.,0.,0.,0.,0.,0.],

                 [0.,0.,8.77,8.76,8.73,8.75,8.76,8.71,8.69,8.64,8.58,8.53,0.,0.,0.,0.],

                 [0.,8.83,8.82,8.82,8.81,8.79,8.79,8.77,8.78,8.74,8.69,8.66,8.59,0.,0.,0.],

                 [8.90,8.90,8.90,8.88,8.88,8.87,8.86,8.85,8.83,8.81,8.79,8.72,8.69,8.64,8.63,0.],


我希望我的颜色条显示从中值的最小值到最大值(从 vmin2=8.53 到 vmax1=10.83)的值(颜色),并且直方图显示正确的颜色。这段代码显示:颜色条映射到第一个直方图(颜色范围(9.55,10.83)),并且子图的颜色没有连接,所以我在第一个子图上有深蓝色为 9.55,第二个为 8.53,最亮的黄色第一个子图为 10.83,第二个为 9.09。


请注意:这篇文章Set Colorbar Range in matplotlib应该可以回答我的问题,但对我不起作用,我不知道为什么。其中颜色范围重叠,因此他们可以使用 plt.colorbar 中的最后一个图像。我不能这样做,因为我的范围不重叠,我只想扩展颜色条以包括两个范围。


波斯汪
浏览 184回答 1
1回答

温温酱

以下应该是解决方案问题的最小示例,即norm对两个图使用相同的解决方案。import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import LogNormx = np.arange(11)a = np.linspace(1,5,100).reshape((10,10))b = np.linspace(6,10,100).reshape((10,10))fig, (ax1, ax2) = plt.subplots(ncols=2)norm=LogNorm(min(a.min(),b.min()), max(a.max(),b.max()))p1 = ax1.pcolormesh(x,x,a, norm=norm)p2 = ax2.pcolormesh(x,x,b, norm=norm)fig.colorbar(p1, ax=ax1)fig.colorbar(p2, ax=ax2)fig.tight_layout()plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python