numpy 设置matplotlib tricontourf的掩码

hrysbysz  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(94)

我有一些numpy数组,其中包含我将在2D网格上可视化的数据。有些数据是非物理的,我想屏蔽这些数据。但是,我不知道如何正确设置tricontour的mask属性。我试过:

import matplotlib.pyplot as mp
import numpy as np

with open('some_data.dat', 'r') as infile:
        x, y, z = np.loadtxt(infile, usecols=(0, 1, 2), unpack=True)
isbad = np.less(z, 1.4) | np.greater(z, 2.1)
mp.tricontourf(x, y, z, mask = isbad)

但最终的数字根本没有被掩盖。我试了masking part of a contourf plot in matplotlib,即。

z2 = np.ma.array(z, mask= isbad)
mp.tricontourf(x, y, z2)

也没有用。我想使用contourftricontourf instrad,因为我不想网格化我的数据。

z[isbad] = np.nan

调用tricontourf时导致分段错误
这是图,红色是我想标记为非物质的颜色。

k0pti3hp

k0pti3hp1#

好戏来了。我需要收集三角形的索引(这是索引到z!),评估它们是否良好,然后仅接受至少一个角有效的三角形(将维度从(ntri,3)减少到ntri

import matplotlib.tri as tr
import numpy as np
import matplotlib.pyplot as plt

triang = tr.Triangulation(x, y)
mask = np.all(np.where(isbad[triang.triangles], True, False), axis=1)
triang.set_mask(mask)
colplt = plt.tricontourf(triang, z)
plt.colorbar()

受此链接启发:http://matplotlib.org/examples/pylab_examples/tripcolor_demo.html

mum43rcc

mum43rcc2#

《华尔街日报》的回答对我不起作用,因为它没有删除某些被屏蔽的点(我认为不是所有的节点都是坏的)。
This solution做了:

z[isbad] = numpy.NaN
z = numpy.ma.masked_invalid(z)
vmin, vmax = z.min(), z.max()
z = z.filled(fill_value=-999)

levels = numpy.linspace(vmin, vmax, n_points)
plt.tricontourf(x, y, z, levels=levels)

相关问题