【发布时间】:2011-08-27 03:49:19
【问题描述】:
如何仅对 MaskedArray 的非屏蔽值进行箱线图?我认为这会由boxplot(ma) 自动发生,但这似乎是对非屏蔽数组进行箱线图。
【问题讨论】:
标签: python numpy matplotlib boxplot
如何仅对 MaskedArray 的非屏蔽值进行箱线图?我认为这会由boxplot(ma) 自动发生,但这似乎是对非屏蔽数组进行箱线图。
【问题讨论】:
标签: python numpy matplotlib boxplot
我认为你是对的——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 中所有数据的箱线图(忽略掩码),第二个子图仅显示了那些未掩码的值的箱线图。
【讨论】:
ma.masked_equal(0),这使得建议的方式有点复杂......
np.ma,所以我想要这些数组的 6 个 doxplot,其中所有等于零的值都被 @987654329 屏蔽@ 和 whih 随机分布在数组中的所有位置......(我不想在我的箱线图中出现)