python - matplotlib忽略丢失的数据

原文 标签 python numpy matplotlib missing-data

该问题已经被提出,并且使用掩码使用good solution

再问一次,因为我想知道是否有一种方法可以使matplotlib自行处理丢失的数据,就像是否丢失了x或y数据之类,只需忽略它并在其中划一条线即可。

这是一些示例代码:

import numpy as np
import matplotlib.pyplot as plt

plt.figure()

x = np.arange(0, 100, 10)
y = np.random.randint(0, 10, 10)
plt.plot(x,y, "*-")

x_nan = np.arange(100)
y_nan = np.asarray([np.nan] * 100)
y_nan[::10] = np.random.randint(0, 10, 10)
plt.plot(x_nan,y_nan,"*-")

mask = np.isfinite(y_nan)
plt.plot(x_nan[mask],y_nan[mask],"--")

plt.show()


第二个图只为非南点绘制点,但没有线穿过它们。

使它看起来像第一种的最简单方法是像在第三幅图中一样定义一个蒙版。我想知道是否有一种方法可以使matplotlib在没有额外掩码的情况下自动表现为这种行为。

最佳答案

简短的回答:不!

长答案:确实可以想象,matplotlib的plot函数将内置某些功能,该功能允许从输入中删除nan

但是,没有。

但是,由于该解决方案实际上仅是一行额外的代码,因此matplotlib不提供此功能的事实是可以接受的。

就像一个有趣的事实:有趣的是,scatter图确实忽略了nan值,例如

line, = plt.plot(x_nan,y_nan,"-")
scatter = plt.scatter(x_nan,y_nan)
print(len(line.get_xdata()))       # 100
print(len(scatter.get_offsets()))  # 10


尽管该行仍然有100个点,但散点只有10个,因为所有的nan值都被删除了。

相关文章:

python - 将URL的内容保存到文本文件

python - 如何使用Python获取布尔值或两个numpy掩码

python - 在不绘制先前点的情况下循环绘制地图

python - PyUnit tearDown和setUp vs __init__和__del__

python - 创建一个Python命令行应用程序

python - 通过C函数更改numpy数组时发生了魔术

python - 更改轴而不更改数据(Python)

python - 编辑海上传奇

python - python weekday和strftime(“%U”)

python - 在python中创建3D矩阵的2D投影