Python matplotlib将方框图和直方图与图例结合在一起

Python matplotlib将方框图和直方图与图例结合在一起,python,matplotlib,histogram,boxplot,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_d

有问题的代码

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\u data
是一个嵌套的dict。我调用的方法如下:

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\u hist(plot\u data,'obfusion')
。我得到的直方图是这样的:

看到了吗?
plot\u box(plot\u data,'platform')
中的方框图与新的直方图相结合


出了什么问题,如何修复?

尝试在
plot\u box()
plot\u hist()
之间创建一个新图形:

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

def plot_box(ax, plot_data, top_key):
而不是打电话:

plt.hist()
plt.boxplot()
你打电话:

ax.hist()
plt.boxplot()

我不确定我是否正确理解了这一点。但是我不想要子图,因为我的图太大了。这并不能解决问题。@KaranGoel你的答案正是我在这里建议的“尝试在
plot\u bol()
plot\u hist()之间创建一个新的图”
…哦,是这样的。我以为你的意思是尝试在两者之间绘制直方图或方框图。我会删除我的。无论如何,你能解释一下它是如何工作的吗?
ax.hist()
plt.boxplot()