有问题的代码
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')
中的箱线图与新的直方图相结合。
出了什么问题,如何解决?
最佳答案
尝试在 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()
关于python - matplotlib 将箱线图和直方图与图例结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744922/