2011-05-17 69 views

回答

6

我認爲你是對的 - plt.boxplot如果發送一個蒙面數組,忽略掩碼。 所以它看起來像你必須給boxplot一些額外的幫助,只發送它沒有被屏蔽的值。由於數組的每一行可能有不同數量的非屏蔽值,因此您將無法使用numpy數組。你必須形成載體的一個Python序列:

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

例如:

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

以上,第一次要情節顯示所有數據的x箱線圖(忽略掩碼),第二個子圖顯示只有那些未被屏蔽的值的箱形圖。

+0

毫米,如果我不屏蔽陣列中的柱,但是例如'ma.masked_equal(0)',這使得建議的方式有點複雜...... – 2011-05-17 12:00:47

+0

@rubae:那麼不是所有的行都有相同數量的值? – unutbu 2011-05-17 12:17:31

+0

我有6個np.ma的(N,M)大小,所以我想要這些數組的6個doxplot,其中所有值等於零都被'np.nan'屏蔽了,並且whih是隨機遍佈在陣列中的...(我不想在我的盒子裏) – 2011-05-17 12:22:27