Python-绘制3D曲面“跳过” Nan和inf

时间:2019-09-09 09:44:12

标签: python matplotlib

这是我的代码的MWE:

import numpy as np

x, y = np.meshgrid(np.linspace(-1, 1, 101), np.linspace(-1, 1, 101))
z = x/y

很显然,尽管z主要包含数字,但它也包含一些inf和一个NaN

我想用matplotlib绘制结果表面。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z)

但是,由于Naninf的原因,这有点混乱。

我正在寻找一种方法来使matplotlib仅“跳过”这些内容,即不绘制与z中的异常对应的点。

认为的一种方法是通过如下屏蔽数组:

mask = np.isfinite(z)
ax.plot_surface(x, y, z[mask])

但是,屏蔽数组会导致维数损失,即z[mask]现在是一维数组,因此matplotlib返回ValueError。如何在掩盖阵列时避免尺寸损失,或者是否有一种更简单的方法来使matplolib“跳过”这些异常?谢谢。

1 个答案:

答案 0 :(得分:0)

我认为,最简单的解决方法是限制z轴

ax.set_zlim(-10,10)

另一种方法,如果要屏蔽z值:

mask=np.isinf(z)
m=1-np.array(mask,dtype='float')
z=z*m