我在箱线图中绘制了一组数据,并在图中添加了一条线。我想在图例中添加中位数和平均值的标签,我已经得到了。不过,我也在尝试添加该行的标签。我尝试以与箱线图类似的方式添加线条标签,并查看了其他示例,但没有一个与我的代码匹配。我无法让它工作..
这是代码:
import matplotlib.pyplot as plt
import numpy as np
def box_plot():
data = np.array([
[17.7, 22.9, 17.6], #M4 Ratio 17
[17.3, 22.0, 16.4], #M5 Ratio 13
[15.8, 21.4, 16.0], #M6 Ratio 10
[16.1, 21.8, 17.6] #M7 Ratio 8.8
])
labels = ['AS', 'JB', 'EG']
meanlineprops = dict(linestyle='solid', linewidth=1.5, color='black')
medianprops = dict(linestyle='dashed', linewidth=1.5, color='black')
fig = plt.figure(figsize=(5,5), layout='constrained')
axes = fig.subplots(ncols=1, nrows=1 )
bp = axes.boxplot(data, labels=labels, showmeans=True, meanline=True, meanprops=meanlineprops, medianprops=medianprops)
axes.set_title('A2')
axes.grid()
volume_A2 = 18.77
line = axes.plot([0,4], [volume_A2, volume_A2], "k--", linewidth=1, color='black', label='True volume')
axes.set_xlim(0.5, 3.5)
axes.set_ylabel('Volume (ml)')
axes.set_xlabel('Medical Physicist')
axes.legend([ bp['means'][0], bp['medians'][0], line], [ 'Mean', 'Median'])
感谢您的帮助!
首先我已将该代码部分更改为该部分。因为这一行给出了错误。
line = axes.plot([0,4], [volume_A2, volume_A2], "--", linewidth=1, color='k', label='True volume')
如果您在 lenged 中使用
line
作为列表,您将面临该错误。
UserWarning: Legend does not support handles for list instances.
A proxy artist may be used instead.
为了解决这个问题,你可以在你的图例中使用
line[0]
,你应该将你的图例更改为那个。
axes.legend([ bp['means'][0], bp['medians'][0], line[0]], [ 'Mean', 'Median', 'True Volume'])
我希望这个解决方案可以帮助你。