2016-04-08 16 views
0

matplotlibでプロットすると線が結合されないようにするために、実数値の後ろにnanを含むリストyがあります。 nanデータをマスキングしてnp.isfinite()でプロットしようとすることができます。ただし、5を超えるとnanを無視することはできますか?そのため、を超える領域ではライン結合が行われません。 pandasにはseries.fillna(limit=2)が組み込まれていますが、これは理想的ですが、nanを置き換えたくありません。私は実際にどのようにこれを行うことができる例が必要です。matplotlibの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

私はきれいにこれをベクトル化する方法が表示されません。あなたが本当に唯一のポイントの一握りを持っている場合は

、ちょうどそれが

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で物事を行うことができ

行うためにループを記述しますが、このいくつかのポイントにそれを持っている場合おそらくその価値はありません。

+0

あなたのコードはまだ試していませんが、私は20以上の000データを持つ160以上のシリーズを持っています。すべての単一のデータポイントをループすることが可能かどうかは不明です。後でお知らせいたします – Curtis

+0

エラーが含まれているコードを修正しました。これ以外にも、私の問題を解決してくれてありがとう! – Curtis

+0

オススメして申し訳ありません。 – tacaswell

関連する問題