gpt4 book ai didi

python - 为什么带有屏蔽数组的 pcolor 仍然填充连接到屏蔽点的四边形,以及如何阻止这种情况?

转载 作者:行者123 更新时间:2023-12-01 02:33:19 28 4
gpt4 key购买 nike

为了缓解 described here 问题,我尝试将 pcolor 绘图分为两个互补部分。我有分别对应于经度和纬度的 XY 数据(实际上,这是由 cartopy 转换为投影坐标的,但是手头的问题与此无关)。经度可能会环绕反子午线,这会导致在全局范围内绘制四边形。为了防止这种情况,我尝试分别绘制这两个部分,如下所示:

#!/usr/bin/env python3.6

from numpy import array, ma
from matplotlib.pyplot import figure, pcolor, savefig

lons = array([[ 100., 120., 140., 160., 180.],
[ 120., 140., 160., 180., -160.],
[ 140., 160., 180., -160., -140.],
[ 160., 180., -160., -140., -120.],
[ 180., -160., -140., -120., -100.],
[-160., -140., -120., -100., -80.]])

lats = array([[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.]])

bts = array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]])

figure()
pcolor(lons, lats, ma.masked_where(lons>0, bts))
savefig("/tmp/ok.png")

figure()
pcolor(lons, lats, ma.masked_where(lons<0, bts))
savefig("/tmp/not_ok.png")

现在,我掩盖所有正经度的图看起来或多或少符合我的预期:

positive longitudes masked

但是我掩盖所有负经度的图,仍然在整个轴上绘制四边形:

negative longitudes masked

在第二个图中,我只想绘制与正经度相对应的四边形。为什么它仍然与屏蔽值建立连接,我怎样才能阻止这种情况发生?

最佳答案

我发现我对另一个问题的快速评论可能不够清楚,但通过屏蔽我的意思是网格需要被屏蔽,而不是值。

from numpy import array, ma
import matplotlib.pyplot as plt

lons = array([[ 100., 120., 140., 160., 180.],
[ 120., 140., 160., 180., -160.],
[ 140., 160., 180., -160., -140.],
[ 160., 180., -160., -140., -120.],
[ 180., -160., -140., -120., -100.],
[-160., -140., -120., -100., -80.]])

lats = array([[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.],
[ 0., 10., 20., 30., 40.]])

bts = array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]])

fig, (ax,ax2) = plt.subplots(ncols=2)
ax.pcolor(ma.masked_where(lons>0, lons),
ma.masked_where(lons>0, lats),
ma.masked_where(lons>0, bts))

ax2.pcolor(ma.masked_where(lons<0, lons),
ma.masked_where(lons<0, lats),
ma.masked_where(lons<0, bts))

plt.show()

enter image description here

关于python - 为什么带有屏蔽数组的 pcolor 仍然填充连接到屏蔽点的四边形,以及如何阻止这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46547310/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com