【问题标题】:matplotlib combines box plot and histogram with legend onmatplotlib 将箱线图和直方图与图例结合在一起
【发布时间】:2013-07-18 16:05:10
【问题描述】:

有问题的代码

def plot_hist(plot_data, top_key):
    plot_data = plot_data[top_key]
    plt.title('Number of emails per week by ' + top_key)
    plt.xlabel('Spam emails per week')
    plt.ylabel('Frequency')
    for key in plot_data:
        plt.hist(plot_data[key], bins=20, alpha=0.5, histtype='step', label=key)
    plt.legend()
    plt.show()

def plot_box(plot_data, top_key):
    plot_data = plot_data[top_key]
    data = [list_of_weeks for list_of_weeks in plot_data.values()]
    plt.title('Spam emails per week by ' + top_key, fontsize=20)
    plt.boxplot(data)
    plt.xticks([(i + 1) for i in range(len(plot_data.values()))], \
                 ['%s' % i for i in plot_data.keys()], rotation=80)
    plt.tight_layout()
    plt.savefig(top_key + '/box_plot.png', format='png')

plot_data 是一个嵌套字典。我正在调用这样的方法:

plot_hist(plot_data, 'platform') # plot the boxplot for platforms
plot_box(plot_data, 'platform') # plot the boxplot for platforms

plot_box(plot_data, 'obfuscation') # plot the boxplot for obfuscations
plot_hist(plot_data, 'obfuscation') # plot the boxplot for obfuscations

问题来自plot_hist(plot_data, 'obfuscation')。我得到这样的直方图:

看到了吗?来自plot_box(plot_data, 'platform') 的箱线图与新的直方图相结合。

出了什么问题,我该如何解决?

【问题讨论】:

    标签: python matplotlib histogram boxplot


    【解决方案1】:

    尝试在plot_box()plot_hist()之间创建一个新图形:

    plt.figure()
    plot_hist(plot_data, 'platform') # plot the boxplot for platforms
    plt.figure()
    plot_box(plot_data, 'platform') # plot the boxplot for platforms
    

    或将您的绘图空间划分为两个子图,在后者中,您需要更改函数以接收AxesSubplot 对象作为输入:

    def plot_box(ax, plot_data, top_key):
    

    而不是调用:

    plt.hist()
    plt.boxplot()
    

    你打电话:

    ax.hist()
    plt.boxplot()
    

    【讨论】:

    • 我不确定我是否理解正确。但由于图表的大小,我不想要子图。
    • 这并不能解决问题。
    • @KaranGoel 您的回答正是我在这里建议的“尝试在plot_bol()plot_hist() 之间创建一个新图形...
    • 哦,原来如此。我以为您的意思是尝试在两者之间绘制直方图或箱线图。我会删除我的。无论如何,你能解释一下它是如何工作的吗?
    猜你喜欢
    • 2016-12-13
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多