首页 > 解决方案 > 来自 for 循环的多个子图共享一个颜色条

问题描述

我对编码有点生疏,但基本上,我正在处理一个大型数据集并尝试以不同的方式对其进行可视化。我做了一个 for 循环,将多个子图变成一个 3 列 x 4 行的面板,以比较 12 个月之间的数据。

from netCDF4 import Dataset
import matplotlib.pyplot as plt
import numpy as np                                                                                                                                                                                                                                                                  
from mpl_toolkits.basemap import Basemap  
import calendar                                                      

data = Dataset("/sst.ltm.1981-2010.nc", 'r', Format='NETCDF4')

lat = data.variables['lat'][:] 
lon = data.variables['lon'][:]
time = data.variables['time'][:] 
sst = data.variables['sst'][:] 

mp = Basemap(projection='moll', llcrnrlat=-90, urcrnrlat=90, llcrnrlon=0, urcrnrlon=360, resolution='i', lon_0=0)

x, y = np.meshgrid(lon, lat)
xx, yy = mp(x, y)

fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(16,16), constrained_layout=True)
fig.suptitle('Monthly Mean SST ', fontsize=24)
for i in np.arange(12):
    plt.subplot(4, 3, i+1)
    colors = mp.pcolor(xx, yy, np.squeeze(sst[i,:,:]), shading='nearest', cmap='cmo.ice')
    mp.drawlsmask(land_color='white', ocean_color='none', zorder=20)
    mp.drawcoastlines(linewidth=0.4, color='black', zorder=25)
    temp = mp.contourf(xx, yy, sst[i,:,:], levels=np.arange(-4.0, 33.0), cmap='cmo.ice')
    plt.title(calendar.month_name[i+1] +' 1981-2010 ')
plt.show()

这些是我一直用于单个图的,但我不希望每个子图下都有小颜色条(即 12 个颜色条):

cb = mp.colorbar(temp,"bottom", size="5%", pad="10%")
cb.set_label('Temperature (\u00b0C)', fontsize=9)

我在其他地方看到了一些类似的例子,但似乎无法根据我的目的调整它们。有什么建议么?另外,如果有任何不稳定的代码,请随时告诉我。

TLDR:一个 for 循环生成 12 个图。我想要一个共享的单色条,位于子图下方的底部。

标签: pythonmatplotlib

解决方案


推荐阅读