我在将具有不同范围 (8.53,9.09) 和 (9.55,10.83) 的两个直方图子图映射到一个颜色条时遇到问题。但是颜色条是使用第一个或第二个子图中的 pcolormesh 绘制的,并且因为它们没有重叠,颜色条不能显示正确的颜色。#first histogram subplotbinx=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 mediandim=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 histogramman_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 中的最后一个图像。我不能这样做,因为我的范围不重叠,我只想扩展颜色条以包括两个范围。
1 回答
温温酱
TA贡献1752条经验 获得超4个赞
以下应该是解决方案问题的最小示例,即norm对两个图使用相同的解决方案。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
x = 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()
添加回答
举报
0/150
提交
取消