掩盖 tricontourf 中的大量缺失数据

Mask lots of missing Data in tricontourf

我有一个相对较大的数据集,其中包含一整年的数据。我这样做是通过连接每个 doy 的所有数据帧来得出这个庞大的数据集,但是在某些日子里没有可用数据,因此数据之间存在很大差距。我只想绘制真实数据并屏蔽或遮盖缺失的数据。我试图将数据重新采样为每小时一次,但是当我这样做时,我得到一个 “qhull Delaunay 三角剖分计算错误:输入不一致(退出代码=1)” 所以起初我试图放弃 NAN 问题是 tricontourf 最终填充了丢失的数据而不是忽略它或掩盖它。所以我想出了下面的解决方案,但它只是掩盖了部分点并用工件填充了另一半。

import matplotlib.pyplot as mp
import numpy as np
import matplotlib.tri as tri
fig,ax=plt.subplots()
dy=devstns[0]
dy=dy.resample("H",base=1).mean()
dy["date"]=dy.index
dy["doy"] = dy["date"].apply(lambda x: x.timetuple().tm_yday)
dy =dy.fillna(0)
x=dy.doy.values
y=dy.UT.values[![enter image description here][1]][1]
z=dy.TEC.values
bad = np.ma.masked_invalid(z)
isbad=np.equal(z,0)
triang = tri.Triangulation(x, y)
mask = np.any(np.where(isbad[triang.triangles], True, False), axis=1)
triang.set_mask(mask)
colplt = ax.tricontourf(triang, z)

这是一个数据样本

|pctDev |多伊 |三角洲 |质检中心 |年份 |技术中心 | UT 日期
2018-08-01 00:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 01:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 02:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 03:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 04:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 05:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 06:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 07:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 08:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 09:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 10:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 11:00:00 NaN NaN NaN NaN NaN NaN NaN

2018-08-01 21:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 22:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-01 23:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 00:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 01:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 02:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 03:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 04:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 05:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 06:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 07:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-02 08:00:00 NaN NaN NaN NaN NaN NaN NaN

2018-08-05 14:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-05 15:00:00 NaN NaN NaN NaN NaN NaN NaN 2018-08-05 16:00:00 NaN NaN NaN NaN NaN NaN NaN

2018-08-15 00:00:00 -33.568720 227.0 -2.578583 7.558583 2018.0 4.980000 0.491667 2018-08-15 01:00:00 -21.027371 227.0 -1.216333 5.755833 2018.0 4.539500 1.491667 2018-08-15 02:00:00 -11.645713 227.0 -0.593917 5.052917 2018.0 4.459000 2.491667 2018-08-15 03:00:00 -11.743647 227.0 -0.461083 3.936250 2018.0 3.475167 3.491667 2018-08-15 04:00:00 -5.666851 227.0 -0.184583 3.155417 2018.0 2.970833 4.491667 2018-08-15 05:00:00 -5.690906 227.0 -0.154583 2.702417 2018.0 2.547833 5.491667 2018-08-15 06:00:00 -16.918020 227.0 -0.469583 2.766583 2018.0 2.297000 6.491667 2018-08-15 07:00:00 -2.511416 227.0 -0.061917 2.550750 2018.0 2.488833 7.491667

tricontourf 显然不接受 x 和 y 数组的 NAN,所以我填写了缺失的 x 值,就像我在儒略日所做的那样,这可能就是它只在中途屏蔽的原因。在我的例子中,我使用时间元组来填充缺少的朱利安日期和时间。我认为这允许三角测量找到 Nan 中 z 的索引(设置为零)以便屏蔽。

import matplotlib.pyplot as mp
import numpy as np
import matplotlib.tri as tri
fig,ax=plt.subplots()
dy=devstns[0]
dy=dy.resample("H",base=1).mean()
dy["date"]=dy.index
dy["doy"] = dy["date"].apply(lambda x: x.timetuple().tm_yday)
dy["HH"] = dy["date"].apply(lambda x: x.timetuple().tm_hour)

dy =dy.fillna(0)
x=dy.doy.values
y=dy.UT.values
z=dy.TEC.values

isbad=np.equal(z,0)
triang = tri.Triangulation(x, y)
mask = np.any(np.where(isbad[triang.triangles], True, False), axis=1)
triang.set_mask(mask)
colplt = ax.tricontourf(triang, z)