2016-04-08 19 views
0

Matplotlib'de çizildiğinde satırların birleştirilmesini engelleyen her bir gerçek sayıdan oluşan bir liste var y.verilerini maskeleyerek bunu np.isfinite() ile çizmeye çalışabilirim. Ancak, 5'ten fazla olduğunda nan'u göz ardı edebilirim - böylece 5 nan s'den daha fazla alana sahip alanda satır birleştirmesi gerçekleşmez. pandas, series.fillna(limit=2) yerleşik olarak ideal görünüyor, ancak nan'u değiştirmek istemiyorum. Bunun nasıl yapılabileceğine gerçekten bir örneğe ihtiyacım var.matplotlib içinde NaN değerlerine katılın

İstediğim çıktı aşağıda verilmiştir (7 ile 14 arasında bir boşluk ile).

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

cevap

1

Ben temiz bu vektörize için bir yol göremiyorum. Eğer gerçekten sadece noktalarının bir avuç varsa

, sadece

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 

Ayrıca vb koşular bakarak np.where şeyler yapabilirdi

yapmak için bir döngü yazma, ancak bu birkaç noktayı o varsa Muhtemelen buna değmez.

+0

Henüz kodunuzu denemedim, ancak 20'den fazla 000 veri içeren 160'ın üzerinde dizim var. Her bir veri noktasına döngü yapmanın mümkün olup olmadığından emin değil. Daha sonra size bildireceğim – Curtis

+0

Bir hata içeren kodunuzu düzelttim. Bunun dışında, sorunumu çözdüğünüz için çok teşekkür ederim! – Curtis

+0

Yazım hatası için özür dilerim. – tacaswell