Jak mogę boxplot tylko niezamaskowane wartości MaskedArray? Pomyślałem, że stanie się to automatycznie przez boxplot(ma)
, ale wydaje się, że to jest boxplot z niezamaskowaną tablicą.Boxplotting Masked Arrays
5
A
Odpowiedz
6
Myślę, że masz rację - plt.boxplot
ignoruje maskę, jeśli wysłana jest zamaskowana tablica. Wygląda więc na to, że musisz dać boxplot
dodatkową pomoc, wysyłając tylko te wartości, które nie są maskowane. Ponieważ każdy wiersz tablicy może mieć inną liczbę niezamaskowanych wartości, nie będzie można użyć tablicy numpy. Musisz utworzyć sekwencję Pythona wektorów:
z = [[y for y in row if y] for row in x.T]
na przykład:
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()
Powyżej, pierwszy subplot pokazuje wykres typu boxplot wszystkich danych w x
(pomijając maska), a drugi wątek pokazuje planszę zawierającą tylko te wartości, które nie są maskowane.
mm, co jeśli nie maskuję kolumn w tablicy, ale np. 'ma.masked_equal (0)', co czyni sugerowany sposób nieco bardziej skomplikowanym ... –
@rubae: Więc nie wszystkie wiersze mają taką samą liczbę wartości? – unutbu
Mam 6 'np.ma's (N, M) -size, więc chcę mieć 6 doxplot tych tablic, w których wszystkie wartości równe zero są zamaskowane przez' np.nan' i whih są losowo w każdym miejscu w tablicach ... (i których nie chcę w moim pudełku) –