将图例添加到matplotlib箱图中,在同一轴上有多个图

mba*_*add 6 python plot matplotlib

我有一个用matplotlib生成的boxplot:

在此输入图像描述

但是,我不知道如何生成图例.每当我尝试以下操作时,我都会收到错误消息,说Legend does not support {boxes: ...我已经完成了相当多的搜索,似乎没有一个示例显示如何实现此目的.任何帮助,将不胜感激!

bp1 = ax.boxplot(data1, positions=[1,4], notch=True, widths=0.35, patch_artist=True)
bp2 = ax.boxplot(data2, positions=[2,5], notch=True, widths=0.35, patch_artist=True)

ax.legend([bp1, bp2], ['A', 'B'], loc='upper right')
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 17

boxplot收益艺术家辞典

result:dict
将boxplot的每个组件映射到创建的matplotlib.lines.Line2D实例列表的字典.该词典具有以下键(假设垂直箱图):

  • boxes:boxplot的主体显示四分位数和中位数的置信区间(如果启用).
  • [...]

使用 boxes,你可以得到传奇艺术家

ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['A', 'B'], loc='upper right')
Run Code Online (Sandbox Code Playgroud)

完整的例子:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

data1=np.random.randn(40,2)
data2=np.random.randn(30,2)

fig, ax = plt.subplots()
bp1 = ax.boxplot(data1, positions=[1,4], notch=True, widths=0.35, 
                 patch_artist=True, boxprops=dict(facecolor="C0"))
bp2 = ax.boxplot(data2, positions=[2,5], notch=True, widths=0.35, 
                 patch_artist=True, boxprops=dict(facecolor="C2"))

ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['A', 'B'], loc='upper right')

ax.set_xlim(0,6)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述