2013-10-29 11 views
5

değerleri gibi gibi görünen bir dizi var: Ben (None, None) değerler çizmek ve dizi değerin indeksini tutmak istiyorummatplotlib: Yok ile Plot numpy diziler

k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None), 
       (1.2, 0.003), (0.99, 0.004)]) 

. Yani, bir (None, None) değeri olduğu her yerde bir boşluk istiyorum. ben

y = k[:,0] + k[:,1] 

çizmek istiyorum yapılır ama hatta birlikte diziler ekleyemezsiniz

. Diziyi maskelemeyi denedim, ancak orijinal k dizisinin dizin değerlerini kaybettim.

minimal örnek:

import matplotlib.pyplot as pyplot 
import numpy 

x = range(5) 
k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None), 
       (1.2, 0.003), (0.99, 0.004)]) 

Fig, ax = pyplot.subplots() 

# This plots a gap---as desired 
ax.plot(x, k[:,0], 'k-') 

# I'd like to plot 
#  k[:,0] + k[:,1] 
# but I can't add None 

# Here I get rid of the (None, None) values so I can add 
# But I lose the original indexing 
mask = k != (None, None) 
y = k[mask].reshape((-1,2)) 

ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--') 

cevap

3

None yerine numpy.nan kullanabilirsiniz.

import matplotlib.pyplot as pyplot 
import numpy 

x = range(5) 
k = numpy.array([(1.,0.001), (1.1, 0.002), (numpy.nan, numpy.nan), 
       (1.2, 0.003), (0.99, 0.004)]) 

Fig, ax = pyplot.subplots() 

# This plots a gap---as desired 
ax.plot(x, k[:,0], 'k-') 

ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--') 

Veya endeksleri Sen yaparak size dizi filtre

import matplotlib.pyplot as pyplot 
import numpy 

x = range(5) 
y = numpy.array([(1.,0.001), (1.1, 0.002), (numpy.nan, numpy.nan), 
       (1.2, 0.003), (0.99, 0.004)]) 

Fig, ax = pyplot.subplots() 


ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--') 
import matplotlib.pyplot as pyplot 
import numpy 

x = range(5) 
k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None), 
       (1.2, 0.003), (0.99, 0.004)]) 

Fig, ax = pyplot.subplots() 

# This plots a gap---as desired 
ax.plot(x, k[:,0], 'k-') 

# I'd like to plot 
#  k[:,0] + k[:,1] 
# but I can't add None 

arr_none = np.array([None]) 
mask = (k[:,0] == arr_none) | (k[:,1] == arr_none) 

ax.plot(numpy.arange(len(y))[mask], k[mask,0]+k[mask,1], 'k--') 
+0

Ben bu basit örneğin, ama başka bir kaynaktan verilerimi alabilir. – jlconlin

+0

ve arsa yerine geçemezsiniz? Yaptığınız şeyi yapabilir misiniz, ama x değerini masanın içinde de mi saklıyorsunuz? –

+0

Bu neredeyse işe yaradı. Maskeyi oluştururken, Saullo'nun cevabı gibi bir dizi 'Yok' yapmalısınız. – jlconlin

1

x ve y arasında tutarlı idi böylece, hem x değerini maskeleyebilir:

test = np.array([None]) 
k = k[k!=test].reshape(-1, 2).astype(float) 

Sonra toplamı sütunları yukarı ve arsa yapmak. Yaklaşımınızın sorunu, None türünü maskenin düzgün oluşturulmasına izin vermeyen bir sayı dizisine dönüştürmediğinizdir. Bunu kontrol edemez böylece