2011-05-17 29 views
5

Sadece MaskedArray'ın maskelenmemiş değerlerini nasıl doldurabilirim? Bunun otomatik olarak boxplot(ma) tarafından gerçekleştirileceğini ancak bunun maskelenmemiş diziyi kutu şeklinde görüntülediğini gördüm.Kutu Çizimli Maskelenmiş Diziler

cevap

6

Haklısınız - plt.boxplot maskelenmiş bir dizi gönderilirse maskeyi yoksayar. Yani sadece maskelenmemiş değerleri göndererek boxplot bazı ekstra yardım vermek zorunda kalacak gibi görünüyor. Dizinin her satırı farklı sayıda maskelenmemiş değere sahip olabileceğinden, sayısal bir dizi kullanamazsınız. Örneğin

z = [[y for y in row if y] for row in x.T] 

: Sen vektörlerin bir Python dizisini oluşturmak gerekecek Üstü

import matplotlib.pyplot as plt 
import numpy as np 

fig=plt.figure() 

N=20 
M=10 

x = np.random.random((M,N)) 
mask=np.random.random_integers(0,1,N*M).reshape((M,N)) 
x = np.ma.array(x,mask=mask) 
ax1=fig.add_subplot(2,1,1) 
ax1.boxplot(x) 

z = [[y for y in row if y] for row in x.T] 
ax2=fig.add_subplot(2,1,2) 
ax2.boxplot(z) 
plt.show() 

enter image description here

, ilk alt plan, görmezden x tüm verilerin bir Boxplot (gösterir maske) ve ikinci alt-çizimde yalnızca maskelenmemiş olan değerlerin bir kutu grafiği gösterilir.

+0

mm, bir dizideki sütunları gizlemezsem, örneğin; 'ma.masked_equal (0)', önerilen yöntemi biraz daha karmaşık hale getirir ... –

+0

@rubae: Yani tüm satırlar aynı sayıda değere sahip değil mi? – unutbu

+0

6 np.ma'nın (N, M) boyutuna sahip olduğum için, bu dizilerin 6 doxplot'una sahip olmak istiyorum, ki buradaki tüm değerler sıfıra eşittir "np.nan" ve whih dizilerdeki rastgele her yerde ... (ve kutumda istemediğim yer) –