come posso Boxplot solo i valori non mascherati di un MaskedArray? Ho pensato che questo sarebbe successo automaticamente da boxplot(ma)
ma questo sembra di boxplot l'array non mascherato.Boxplotting Masked Array
5
A
risposta
6
penso che tu abbia ragione - plt.boxplot
ignora la maschera se inviate una matrice mascherato. così sembra che si dovrà dare boxplot
qualche aiuto extra inviandolo solo i valori che non sono mascherati. Poiché ogni riga dell'array può avere un numero diverso di valori non mascherati, non sarà possibile utilizzare una matrice numpy. Dovrete formare una sequenza di vettori Python:
z = [[y for y in row if y] for row in x.T]
Ad esempio:
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()
Sopra, la prima sottotrama mostra un grafico a scatole di tutti i dati in x
(ignorando la maschera), e la seconda sottotrama mostra un boxplot di soli quei valori che non sono mascherati.
millimetri, cosa se non maschera colonne in una matrice, ma ad esempio 'ma.masked_equal (0)', che rende un po 'più complicato il modo suggerito ... –
@rubae: Quindi non tutte le righe hanno lo stesso numero di valori? – unutbu
sto avendo 6 'np.ma' di di (N, M) -size, quindi voglio avere 6 doxplot di queste matrici, in cui tutti i valori uguali a zero sono mascherati da' np.nan' e whih sono casualmente dappertutto negli array ... (e che non voglio nel mio boxplot) –