我有一个列表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, '-' )
答案 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
进行操作,查看运行等,但如果您有这几点,则可能不值得。