这是我的代码的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)
但是,由于Nan
和inf
的原因,这有点混乱。
我正在寻找一种方法来使matplotlib仅“跳过”这些内容,即不绘制与z
中的异常对应的点。
我认为的一种方法是通过如下屏蔽数组:
mask = np.isfinite(z)
ax.plot_surface(x, y, z[mask])
但是,屏蔽数组会导致维数损失,即z[mask]
现在是一维数组,因此matplotlib返回ValueError
。如何在掩盖阵列时避免尺寸损失,或者是否有一种更简单的方法来使matplolib“跳过”这些异常?谢谢。
答案 0 :(得分:0)
我认为,最简单的解决方法是限制z轴
ax.set_zlim(-10,10)
另一种方法,如果要屏蔽z值:
mask=np.isinf(z)
m=1-np.array(mask,dtype='float')
z=z*m