猿问

在 For 循环 Matplotlib 中创建子图

我正在尝试使用 matplotlib 制作 3,2 子图,但在阅读文档后我不明白如何执行此操作,因为它适用于我的代码,如下所示:


import pandas as pd

from sys import exit

import numpy as np

import matplotlib.pyplot as plt

import datetime

import xarray as xr

import cartopy.crs as ccrs

import calendar


list = [0,1,2,3,4,5]

now = datetime.datetime.now()

currm = now.month

import calendar

fig, axes = plt.subplots(nrows=3,ncols=2)

fig.subplots_adjust(hspace=0.5)

fig.suptitle('Teleconnection Pos+ Phases {} 2020'.format(calendar.month_name[currm-1]))

#for x in list: 

#for ax, x in zip(axs.ravel(), list):

for x, ax in enumerate(axes.flatten()):

        dam = DS.where(DS['time.year']==rmax.iloc[x,1]).groupby('time.month').mean()#iterate by index 

of column "1" or the years

        dam = dam.sel(month=3)#current month mean 500

        dam = dam.sel(level=500)

        damc = dam.to_array()

        lats = damc['lat'].data

        lons = damc['lon'].data

#plot data

        ax = plt.axes(projection=ccrs.PlateCarree())

        ax.coastlines(lw=1)

        damc = damc.squeeze()

        ax.contour(lons,lats,damc,cmap='jet')

        ax.set_title(tindices[x])

        plt.show()

#plt.clf()

我已经尝试了多个选项,其中一些在评论上方,我无法让子图显示在我期待的 3,2 子图中。我只得到单个地块。我在下面的 for 循环中包含了第一个图,您可以看到它没有绘制在 3,2 子图区域内:


[![enter image description here][1]][1]

带有“ax.contour”的行可能是问题,但我不确定。非常感谢,下面是我的目标子图区域:


[![enter image description here][1]][1]


catspeake
浏览 194回答 1
1回答

www说

没有可重现的样本数据,以下无法进行测试。但是,您的循环分配了一个新的ax并且不使用ax正在迭代的对象。此外,plt.show()被放置在循环内。考虑以下调整for x, ax in enumerate(axes.flatten()):    ...    ax = plt.axes(projection=ccrs.PlateCarree())    ...    plt.show()考虑将投影放在循环内的plt.subplots然后索引中:axesfig, axes = plt.subplots(nrows=3, ncols=2, subplot_kw={'projection': ccrs.PlateCarree()})fig.subplots_adjust(hspace=0.5)fig.suptitle('Teleconnection Pos+ Phases {} 2020'.format(calendar.month_name[currm-1]))axes = axes.flatten()for x, ax in enumerate(axes):        dam = DS.where(DS['time.year']==rmax.iloc[x,1]).groupby('time.month').mean()        dam = dam.sel(month=3)#current month mean 500        dam = dam.sel(level=500)        damc = dam.to_array()        lats = damc['lat'].data        lons = damc['lon'].data        axes[x].coastlines(lw=1)        damc = damc.squeeze()        axes[x].contour(lons, lats, damc, cmap='jet')        axes[x].set_title(tindices[x])plt.show() plt.clf()
随时随地看视频慕课网APP

相关分类

Python
我要回答