【问题标题】:Matplotlib Boxplot: Showing Number of Occurrences of Integer OutliersMatplotlib Boxplot:显示整数异常值的出现次数
【发布时间】:2017-07-27 14:49:07
【问题描述】:

我有一个如下图(使用plt.boxplot()):

现在,我想要绘制一个数字,这些异常值出现的频率(最好在每个异常值的右上角)。

这可以实现吗?

【问题讨论】:

    标签: python matplotlib boxplot


    【解决方案1】:

    ax.boxplot 返回箱线图中所有元素的字典。您需要从该字典中获取的密钥是'fliers'

    boxdict['fliers'] 中,有用于绘制传单的Line2D 实例。我们可以使用.get_xdata().get_ydata() 获取他们的xy 位置。

    您可以使用 set 查找所有唯一的 y 位置,然后使用 .count() 查找在该位置绘制的传单数量。

    那么它只是使用matplotlib的ax.text给绘图添加文本标签的一个例子。

    考虑以下示例:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # Some fake data
    data = np.zeros((10000, 2))
    data[0:4, 0] = 1
    data[4:6, 0] = 2
    data[6:10, 0] = 3
    data[0:9, 1] = 1
    data[9:14, 1] = 2
    data[14:20, 1] = 3
    
    # create figure and axes
    fig, ax = plt.subplots(1)
    
    # plot boxplot, grab dict
    boxdict = ax.boxplot(data)
    
    # the fliers from the dictionary
    fliers = boxdict['fliers']
    
    # loop over boxes in x direction
    for j in range(len(fliers)):
    
        # the y and x positions of the fliers
        yfliers = boxdict['fliers'][j].get_ydata()
        xfliers = boxdict['fliers'][j].get_xdata()
    
        # the unique locations of fliers in y 
        ufliers = set(yfliers)
    
        # loop over unique fliers
        for i, uf in enumerate(ufliers):
    
            # print number of fliers
            ax.text(xfliers[i] + 0.03, uf + 0.03, list(yfliers).count(uf))
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多