matplotlib忽略丢失的数据

时间:2018-02-06 07:38:59

标签: 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在没有额外掩码的情况下自动运行。

1 个答案:

答案 0 :(得分:1)

简答:不!

答案很长:人们可以想象,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个,因为所有的纳米值都被移除了。