如何在箱线图中添加绘制线的图例?

问题描述 投票:0回答:1

我在箱线图中绘制了一组数据,并在图中添加了一条线。我想在图例中添加中位数和平均值的标签,我已经得到了。不过,我也在尝试添加该行的标签。我尝试以与箱线图类似的方式添加线条标签,并查看了其他示例,但没有一个与我的代码匹配。我无法让它工作..

这是代码:

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'])
    

感谢您的帮助!

python matplotlib label legend boxplot
1个回答
0
投票

首先我已将该代码部分更改为该部分。因为这一行给出了错误。

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'])

我希望这个解决方案可以帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.