matplotlib将箱形图和直方图与图例相结合

时间:2013-07-19 11:24:28

标签: python matplotlib histogram boxplot

有问题的代码

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')。我像这样得到直方图:

enter image description here

请参阅?来自plot_box(plot_data, 'platform')的方框图与新的直方图相结合。

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

1 个答案:

答案 0 :(得分:2)

尝试在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()