我试图创建一个函数,绘制EOF并通过每个模式循环。这部分很好,我没有麻烦得到12个EOF的图。
然而,现在我想对前三个图、前六个图、前九个图进行求和,然后在每行的末尾生成一个图,以显示前三个图、前六个图等的累积和。
附件是我的图现在的样子。我想在第四列中添加求和。
的数据
我尝试创建一个新的循环,它基本上是一个“if语句”,表示如果列是最后一列,则对先前的模式进行求和,并为这些模式添加一个子图(在第4列中)。
不幸的是,在这样做的时候,我没有看到我的图有任何变化。我试过改变为对i求和(我会解释为遍历每种模式),甚至显式调用每种模式,这最终会产生错误。我很难弄清楚如何从for循环中对eofs求和。
代码如下:
def GPH_EOFs_plot(eof12):
fig = plt.figure(figsize=(12,8))
for i in range(0,12):
clevs = np.linspace(-75, 75, 11)
proj = ccrs.Orthographic(central_longitude=-90, central_latitude=90)
ncols = 4
nrows = 3
ax = plt.subplot(ncols,nrows,i+1, projection = proj)
ax.coastlines(color='grey', linewidth=1.0)
ax.set_global()
eofs = eof12.sel(mode=i)
eofs_2d = eofs.squeeze()
eofs_2d.plot.contourf(ax=ax, levels=clevs, cmap=plt.cm.RdBu_r, transform=ccrs.PlateCarree(), add_colorbar=False)
if ncols == 3:
eof_sum = sum(i)
eof_sum.plot.contourf(ax=ax, levels=clevs, cmap=plt.cm.RdBu_r, transform=ccrs.PlateCarree(), add_colorbar=True)
plt.savefig("EOFs_fromfunction.png",format='png')
字符串
1条答案
按热度按时间xj3cbfub1#
代码有一些问题,我无法测试,但这是一个尝试。
首先,您的索引
i
用于eof12.sel(mode=i)
中的mode
和子图索引。当您仅绘制模式时,这很好。现在,您有一个新列,索引将具有不同的含义。我将它们命名为
imode
和isubplt
。接下来,每次
i % 3 == 2
都有一个额外的子图。这是你的标记。每次发生这种情况,isubplt
都必须增加,但imode
不会增加。最后,您需要通过创建一个新的
ax
来设置第四列。这里缺少的是计算和的代码。从你所说的,你想将
eof_sum
初始化为零,并将每个eof_2d
添加到它。你必须填写此代码。字符串