matplotlib 如何将颜色条的大小与子图匹配?

wgx48brx  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(113)

我试图添加一个单一的颜色条到我所有的4个子情节,我已经经历了很多答案,但那里的代码似乎令人困惑,我是新的python和matplotlib

我写的代码是这样的

import matplotlib.pyplot as plt

ap_lev1=wp_arr[42,1,:,:]
ap_lev2=wp_arr[42,2,:,:]
ap_lev3=wp_arr[42,6,:,:]
ap_lev4=wp_arr[42,8,:,:]

plt.figure(figsize=(8,8), constrained_layout=True)
plt.subplot(2,2,1)
plt.contourf(ap_lev1, 100, cmap='jet')
#plt.colorbar()
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("w' at Zi/Z=0.05")
#plt.show()

#plt.figure(figsize=(10,8)
plt.subplot(2,2,2)
plt.contourf(ap_lev2, 100, cmap='jet')
#plt.colorbar()
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("w' at Zi/Z=0.10")
#plt.show()

#plt.figure(figsize=(10,8))
plt.subplot(2,2,3)
plt.contourf(ap_lev3, 100, cmap='jet')
#plt.colorbar()
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("w' at at Zi/Z=0.25")
#plt.show()

plt.subplot(2,2,4)
plt.contourf(ap_lev4, 100, cmap='jet')
#plt.colorbar()
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("w' at Zi/Z = 0.5")

plt.colorbar()
#plt.tight_layout()
plt.show()
dbf7pr2w

dbf7pr2w1#

你应该跟踪你的图形和坐标轴,并通过指定合适的坐标轴(在你的例子中是axs[:,1])给图形添加颜色条。另外,你的代码经常重复,你可以使用一些重构:

import matplotlib.pyplot as plt

import numpy as np
wp_arr = np.random.rand(43, 9, 10, 10)

ap_lev = [
    wp_arr[42,1,:,:],
    wp_arr[42,2,:,:],
    wp_arr[42,6,:,:],
    wp_arr[42,8,:,:]
]

Z = [0.05, 0.10, 0.25, 0.5]

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8,8), constrained_layout=True)

for i, ax in enumerate(fig.axes):
    qcs = ax.contourf(ap_lev[i], 100, cmap='jet')
    ax.set_xlabel("Longitude")
    ax.set_ylabel("Latitude")
    ax.set_title(f"w' at Zi/Z={Z[i]}")

fig.colorbar(qcs.collections[-1].colorbar, ax=axs[:,1], cmap='jet')
plt.show()

输出伪数据(因此值不同):

相关问题