Python绘图三维曲面“跳过”Nan和inf

2024-04-25 00:41:57 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

import numpy as np

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

显然,尽管z包含的大部分是数字,但它也包含一些infNaN

我想用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“跳过”这些异常?谢谢


Tags: 方法importplotmatplotlibasnpfig绘制