2

我正在尝试创建一个具有 1 行和 3 列的图形并在很多事情上苦苦挣扎。一方面,我的子图变成了非常小的小条,尝试添加颜色条时出现错误。如何使子图成为框并且颜色条显示在最右侧?

rmax0、rmax1 和 rmax2 的范围都在 0 到 700 之间(大多数小于 200),fspd 的范围在 0 到 10 之间。

import matplotlib.pyplot as plt
import numpy as np

ax1 = plt.subplot(131)
nice = plt.get_cmap('BuPu')
bins1 = np.arange(0,700,700/50.0)
bins2 = np.arange(0,10,10/50.0)
h,xedges,yedges = np.histogram2d(rmax0,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
ax1.pcolormesh(X, Y, h,cmap=nice)
ax1.set_aspect('equal')
plt.xlim([0,200])
plt.ylim([0,10])

ax2 = plt.subplot(132)
h,xedges,yedges = np.histogram2d(rmax1,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
ax2.pcolormesh(X, Y, h,cmap=nice)
ax2.set_aspect('equal')
plt.xlim([0,200])
plt.ylim([0,10])

ax3 = plt.subplot(133)
h,xedges,yedges = np.histogram2d(rmax2,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
ax3.pcolormesh(X, Y, h,cmap=nice)
ax3.set_aspect('equal')
plt.xlim([0,200])
plt.ylim([0,10])
plt.colorbar()

plt.show()

当我添加 plt.colorbar() 行时,我收到以下错误: RuntimeError: No mappable was found to use for colorbar creation。首先定义一个可映射的对象,例如图像(使用 imshow)或轮廓集(使用 contourf)。

4

1 回答 1

1

因为你强制纵横比,你的情节最终像小条一样。尝试禁用这些行:

ax1.set_aspect('equal')
ax2.set_aspect('equal')
ax3.set_aspect('equal')

如果您这样称呼它,颜色条将显示:

p = ax3.pcolormesh(X, Y, h, cmap=nice)
plt.colorbar(p, ax=[ax1, ax2, ax3])

我将所有轴的列表传递到colorbar此处,以使颜色条缩小所有三个子图以腾出空间。如果你忽略它,空间将只从最后一个子图中占用,使这个子图的宽度小于其他子图的宽度。

复制粘贴我用来测试的完整代码:

import matplotlib.pyplot as plt
import numpy as np

rmax0 = np.random.rand(1000) * 700
rmax1 = np.random.rand(1000) * 700
rmax2 = np.random.rand(1000) * 700
fspd = np.random.rand(1000) * 10

ax1 = plt.subplot(131)
nice = plt.get_cmap('BuPu')
bins1 = np.arange(0,700,700/50.0)
bins2 = np.arange(0,10,10/50.0)
h,xedges,yedges = np.histogram2d(rmax0,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
ax1.pcolormesh(X, Y, h,cmap=nice)
ax1.set_aspect('auto')
plt.xlim([0,200])
plt.ylim([0,10])

ax2 = plt.subplot(132)
h,xedges,yedges = np.histogram2d(rmax1,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
ax2.pcolormesh(X, Y, h,cmap=nice)
ax2.set_aspect('auto')
plt.xlim([0,200])
plt.ylim([0,10])

ax3 = plt.subplot(133)
h,xedges,yedges = np.histogram2d(rmax2,fspd,bins=[bins1,bins2],normed=True)
X,Y = np.meshgrid(xedges,yedges)
p = ax3.pcolormesh(X, Y, h,cmap=nice)
ax3.set_aspect('auto')
plt.xlim([0,200])
plt.ylim([0,10])
plt.colorbar(p, ax=[ax1, ax2, ax3])

plt.show()
于 2015-02-17T21:33:06.950 回答