【问题标题】:Boxplotting Masked Arrays箱线图蒙版数组
【发布时间】:2011-08-27 03:49:19
【问题描述】:

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

【问题讨论】:

    标签: python numpy matplotlib boxplot


    【解决方案1】:

    我认为你是对的——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 中所有数据的箱线图(忽略掩码),第二个子图仅显示了那些未掩码的值的箱线图。

    【讨论】:

    • mm,如果我不屏蔽数组中的列,但例如ma.masked_equal(0),这使得建议的方式有点复杂......
    • @rubae: 所以不是所有的行都有相同数量的值?
    • 我有 6 个 (N,M) 大小的 np.ma,所以我想要这些数组的 6 个 doxplot,其中所有等于零的值都被 @987654329 屏蔽@ 和 whih 随机分布在数组中的所有位置......(我不想在我的箱线图中出现)
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 2020-05-22
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2016-09-14
    • 2013-05-11
    • 2021-03-08
    相关资源
    最近更新 更多