Boxplotting蒙面数组

时间:2011-05-17 11:07:12

标签: python numpy matplotlib boxplot

我如何只能绘制MaskedArray的非遮罩值?我认为这会由boxplot(ma)自动发生,但这似乎是对非屏蔽数组进行封装。

1 个答案:

答案 0 :(得分: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中所有数据的箱线图(忽略了掩码),第二个子图显示了仅未被屏蔽的那些值的箱线图。

相关问题