在matplotlib中加入NaN值

时间:2016-04-08 00:38:58

标签: python numpy matplotlib

我有一个列表y,其中包含每个实数之后的nan,这可以防止在matplotlib中绘制时连接线。我可以通过屏蔽np.isfinite()数据尝试使用nan绘制此图。但是,当它们超过5时,我可以忽略nan - 因此,在超过5 nan s的区域内不会发生线连接。 pandas内置series.fillna(limit=2)似乎很理想,但我不想替换nan。我真的需要一个例子来说明如何做到这一点。

我想要的输出如下(差距在7到14之间)。

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(20)
y = [np.nan, 5, np.nan, np.nan, 3, np.nan, 10, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2, np.nan, 7, np.nan, 22, np.nan, 15, np.nan]

plt.plot(x,y, '-' )

enter image description here

1 个答案:

答案 0 :(得分:1)

我没有看到一种方法来干净地对其进行矢量化。

如果你真的只有一些点,那就写一个循环去做吧

def brute_force_clean_nans(x, y):
    x_clean, y_clean = [], []
    cnt = 0
    for _x, _y in zip(x, y):
        if np.isnan(_y):
            cnt += 1
            if cnt == 5:
                 # on the 5th nan, put it in the list to break line
                 x_clean.append(_x)
                 y_clean.append(_y)
            continue
        cnt = 0
        x_clean.append(_x)
        y_clean.append(_y)
    return x_clean, y_clean

您也可以使用np.where进行操作,查看运行等,但如果您有这几点,则可能不值得。