python – 为matplotlib tricontourf设置掩码

我有一些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)

这也没用.我想使用contourf的tricontourf instrad,因为我不想对我的数据进行网格化.

z[isbad] = np.nan

调用tricontourf时会导致分段错误

这是图,红色是我想要标记为非物质的颜色.

最佳答案 这就是诀窍.我需要收集三角形的索引(它们是z的索引!),评估它们是否良好然后只接受三角形,因为至少一个角是有效的(将尺寸从(ntri,3)减小到ntri

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

灵感来自这个链接:http://matplotlib.org/examples/pylab_examples/tripcolor_demo.html

点赞