python - 在 ImageGrid 中使用 basemap.pcolor 清空颜色栏

标签 python matplotlib matplotlib-basemap subplot

以下代码生成了我想要的图像,但颜色条为空白/白色,与数据不匹配:

def plot_array(da, ax=None, shift=True):
    """plots an array of lat by lon on a coastline map"""

    m = basemap.Basemap()
    m.drawcoastlines()
    m.pcolormesh(da.lon, y=da.lat, data=da.T, latlon=True)

    return m

# 'monthly mean' is an xarray DataArray

fig = plt.figure(0, (14, 8))
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.3,
                 cbar_mode='single', cbar_location="bottom",)
for i, m in enumerate(months):
    plt.sca(grid[i])
    plot_array(monthly_mean.sel(month=i + 1))
    plt.title(m)
plt.suptitle("{b} - {y} monthly means".format(b=benchmark, y=year))
# plt.colorbar()
plt.tight_layout()

os.makedirs("plots/monthly_means/{y}".format(y=year), exist_ok=True)
plt.savefig("plots/monthly_means/{y}/{b}_{y}.png".format(b=benchmark, y=year))
plt.close()

blank colorbar

我还需要做些什么来让颜色条与 ImageGrid 一起工作,还是 ImageGrid 和 basemap 不能很好地协同工作?

最佳答案

据我了解,这不是 basemap 问题。 ImageGrid() 调用只是为颜色条设置一组空白轴,可以通过 cax 传递给 plt.colorbar()争论。默认情况下,ImageGrid() 具有参数 cbar_set_cax=True,它在每个子图中设置 cax 属性。然后您可以将其传递给 colorbar():

...
plt.colorbar(cax=grid[0].cax)
plt.tight_layout()
...

这将只使用当前事件的轴来确定颜色条数据范围,因此它只会与最终绘图保持一致。您将不得不使用 vmin/vmaxpcolormesh() 的组合来确保所有绘图的一致性。

关于python - 在 ImageGrid 中使用 basemap.pcolor 清空颜色栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917219/

相关文章:

python - 在 Matplotlib 中设置绘图 Canvas 的大小

Python 在 basemap 上绘制 shapefile

python - 在 Python 中绘制(纬度、经度、值)元组列表?

python - 运行命令 "conda env create -f environment.yml"后发出警告

python - 在 Python 中将整数转换为十六进制

python - 更改宽度/高度像素而不关心纵横比

python - 推进 basemap 绘图

python - 如何使用 Rally API 获取测试用例名称

python - 使用 Python 将 Pandas 数据框剪切为 shapefile

python - python 2.7中的FFMPEG文件编写器