Matplotlib 如何为直方图的子图添加全局图例
Matplotlib how to add global legend for subplot of histograms
如何为子图中的所有直方图添加全局图例?
下面的代码模仿了一些数据,我想在图中的某处有一个全局图例。我正在考虑底部,但会考虑更好的答案。它可以左对齐、居中或展开。
如何添加全局图例?我尝试按照 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)
可以使用 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)
如何为子图中的所有直方图添加全局图例?
下面的代码模仿了一些数据,我想在图中的某处有一个全局图例。我正在考虑底部,但会考虑更好的答案。它可以左对齐、居中或展开。
如何添加全局图例?我尝试按照 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)
可以使用 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)