有没有办法在 matplotlib boxplot 图例中标记平均值和中位数?

ski*_*joe 3 python matplotlib boxplot

我有以下箱形图,它为每个框绘制了一些具有不同平均值和中值的值;我想知道是否有任何方法来标记它们,以便它们出现在图形图例上(因为当前的箱线图绘制了一条橙色线表示中位数,一个蓝色点表示平均值,并且不太清楚哪个是哪个)?还有一种方法可以为这些子图制作一个图例,而不是为每个子图制作一个图例,因为它们本质上是相同的对象,只是不同的数据?

这是其中一个子图的代码示例,其他子图相同但具有不同的数据:

fig = plt.figure()
xlim = (4, 24)
ylim = (0, 3700)

plt.subplot(1,5,5)
x_5_diff = {5: [200, 200, 291, 200, 291, 200, 291, 200, 291, 200, 291, 200, 291, 200, 291],
 7: [161, 161, 179, 161, 179, 161, 179, 161, 179, 161, 179, 161, 179, 161, 179],
 9: [205, 205, 109, 205, 109, 205, 109, 205, 109, 205, 109, 205, 109, 205, 109],
 11: [169, 169, 95, 169, 95, 169, 95, 169, 95, 169, 95, 169, 95, 169, 95],
 13: [43, 43, 70, 43, 70, 43, 70, 43, 70, 43, 70, 43, 70, 43, 70],
 15: [33, 33, 39, 33, 39, 33, 39, 33, 39, 33, 39, 33, 39, 33, 39],
 17: [23, 23, 126, 23, 126, 23, 126, 23, 126, 23, 126, 23, 126, 23, 126],
 19: [17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17],
 21: [15, 15, 120, 15, 120, 15, 120, 15, 120, 15, 120, 15, 120, 15, 120],
 23: [63, 63, 25, 63, 25, 63, 25, 63, 25, 63, 25, 63, 25, 63, 25]}

keys = sorted(x_5_diff)
plt.boxplot([x_5_diff[k] for k in keys], positions=keys)  # box-and-whisker plot
plt.hlines(y = 1600, colors= 'r', xmin = 5, xmax = 23, label = "Level 1 Completed")
plt.title("x = 5 enemies")
plt.ylim(0,3700)
plt.plot(keys, [sum(x_5_diff[k]) / len(x_5_diff[k]) for k in keys], '-o')


plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

小智 5

虽然有点晚了,但试试这个:

    bp = plt.boxplot([x_5_diff[k] for k in keys], positions=keys)

    # You can access boxplot items using ist dictionary
    plt.legend([bp['medians'][0], bp['means'][0]], ['median', 'mean'])
Run Code Online (Sandbox Code Playgroud)