我在用plt.imshow()函数画云图的时候出现这样一个问题:我将8个云图放在一起,想共享一个colorbar,并且想让colorbar在整个图的又方,但是我现在的代码可以显示一个colorbar,但是呢这个colorbar只显示在最后一个imshow图的右方。
代码如下:
matrices = np.random.random((2, 4, 10, 10))
for k in range(1, matrices.shape[0] * matrices.shape[1] + 1):
plt.subplot(matrices.shape[0], matrices.shape[1], k)
for i in range(matrices.shape[0]):
for j in range(matrices.shape[1]):
matrix = matrices[i, j, :, :]
plt.imshow(matrix, cmap="Reds")
plt.colorbar()
plt.show()
运行结果为:
您把plt.colorbar()语句,后退一个缩进单位试试,我想ply.cilorbar()应该在第一层for之内的吧。
您的plt.colorbar()在循环之外,仅执行了一次,当然就只有一个colorbar啰。😋
由于不使用plt.subplots()函数,可以尝试使用plt.colorbar()函数的参数来设置colorbar的位置和大小,并通过指定axes参数来将colorbar与子图关联起来。下面是解决方案:
import matplotlib.pyplot as plt
# 绘制8个云图
fig, axs = plt.subplots(2, 4, figsize=(10, 5))
for i, ax in enumerate(axs.flat):
im = ax.imshow(data[i], cmap='jet')
plt.colorbar(im, ax=ax, pad=0.02, fraction=0.1)
# 设置共享的colorbar
fig.subplots_adjust(right=0.85)
cbar_ax = fig.add_axes([0.9, 0.15, 0.02, 0.7])
plt.colorbar(im, cax=cbar_ax)
plt.show()
这段代码会创建一个2x4的子图,将每个云图绘制在对应的子图上,并通过指定pad和fraction参数来设置colorbar的位置和大小。然后,通过调整right参数来确保子图和colorbar的位置不会重叠。最后,使用fig.add_axes()
函数创建一个新的axes对象来绘制共享的colorbar,并通过指定cax参数将其与最后一个子图关联起来。
希望以上解决方案能够帮助到你!如果还有其他问题,请随时提问。