【问题标题】:Matplotlib how to add global legend for subplot of histogramsMatplotlib如何为直方图的子图添加全局图例
【发布时间】:2021-05-03 21:29:15
【问题描述】:

如何为子图中的所有直方图添加全局图例?

下面的代码模仿了一些数据,我想在图中的某个地方有一个全局图例。我正在考虑底部,但会考虑更好的答案。它可以左对齐、居中或展开。

如何添加全局图例?我尝试按照here 的建议使用fig.legend((v1, v2, v3), ('v1', 'v2', 'v3'), 'lower left'),但我认为这不适用于直方图。

使用 Python 3.8

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
%matplotlib inline

v1=[3,1.1,2,5.2,4.9,2.6,3,0.5]
v2=[6.1,5.2,9.5,4.5]
v3=[0.1,1.4,0.5,1.2]

fig, axes = plt.subplots(4,2, figsize=(6.5,4.0), constrained_layout=True)
fig.suptitle('suptile')

mybins = [0,3,6,9,12]
mylist = [0,1,4,7]
for ii, ax in enumerate(axes.flat):
    if ii in mylist:
        data = [v1,v2,v3]
        colors = ['blue', 'red', 'green']
        labels = ['v1', 'v2', 'v3']
    else:
        data = [v1,v2]
        colors = ['blue', 'red']
        labels = ['v1', 'v2']
    ax.hist(data, color=colors,edgecolor='black', alpha=0.5,
            density=False, cumulative=False, bins=mybins,
            orientation='horizontal', stacked=True, label=labels)
    ax.set_yticks(mybins)

【问题讨论】:

标签: python matplotlib legend subplot


【解决方案1】:

可以使用fig.legend() 设置多个图的图例。放置标准可以用bbox_transform 设置,三栏显示可以用ncol 设置。我设置在右下角,你可以用loc='lower left'把它设置在左下角。

fig.legend(labels, loc='lower right', bbox_to_anchor=(1,-0.1), ncol=len(labels), bbox_transform=fig.transFigure)

【讨论】:

  • 这是完美的,谢谢。出于某种原因,当我做plt.savefig('myfig.jpg', dpi=300, format='jpg') 时,传说没有出现。你知道怎么解决吗?
  • 在这里找到了保存问题的答案 (stackoverflow.com/questions/44642082/…) 和 @MPa 的答案。使用plt.savefig('myfig.jpg', dpi=300, format='jpg', bbox_inches="tight") 有效。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
相关资源
最近更新 更多