Python matplotlib忽略丢失的数据

Python matplotlib忽略丢失的数据,python,numpy,matplotlib,missing-data,Python,Numpy,Matplotlib,Missing Data,这个问题已经被问过了,并且有一个很好的答案 再次询问,因为我想知道是否有办法让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_na

这个问题已经被问过了,并且有一个很好的答案

再次询问,因为我想知道是否有办法让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()
第二个绘图仅为非nan点绘制点,但没有穿过它们的线

使其看起来像第一个图的最简单方法是定义一个遮罩,如第三个图中所示。我想知道是否有一种方法可以使matplotlib在没有额外掩码的情况下自动执行此操作。

简短回答:没有

答案很长:我们确实可以想象matplotlib的
plot
函数内置了一些功能,可以从输入中删除
nan
s

但是,没有

但是,由于解决方案本质上只是一行额外的代码,matplotlib不提供此功能的事实是可以接受的

正如一个有趣的事实:有趣的是,一个
scatter
plot实际上是irgnores
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个点,但由于删除了所有nan值,因此散点仅有10个