6

如何仅对 MaskedArray 的非屏蔽值进行箱线图?我认为这会自动发生,boxplot(ma)但这似乎是对非屏蔽数组进行箱线图。

4

1 回答 1

9

我认为你是对的——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()

在此处输入图像描述

上面,第一个子图显示了所有数据的箱线图x(忽略掩码),第二个子图仅显示了那些没有被掩码的值的箱线图。

于 2011-05-17T11:37:29.927 回答