繁体   English   中英

将图例添加到Pandas DataFrame框图中

[英]Adding a legend to a Pandas DataFrame boxplot

我正在同一轴上绘制一系列箱图,并希望添加一个图例来识别它们。 非常简化,我的脚本看起来像这样:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df={}
bp={}
positions = [1,2,3,4]
df[0]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D'])
df[1]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D'])
colour=['red','blue']
fig, ax = plt.subplots()
for i in [0,1]:
    bp[i] = df[i].plot.box(ax=ax,
                          positions = positions,
                          color={'whiskers': colour[i],
                                 'caps': colour[i],
                                 'medians': colour[i],
                                 'boxes': colour[i]}
                          )
plt.legend([bp[i] for i in [0,1]], ['first plot', 'second plot'])
fig.show()

情节很好,但没有画出传说,我收到了这个警告

    UserWarning: Legend does not support <matplotlib.axes._subplots.AxesSubplot object at 0x000000000A7830F0> instances.
A proxy artist may be used instead.

(我在将一个图例添加到散点图之前已经有了这个警告,但是仍然绘制了图例,所以我可以忽略它。)

这是proxy artists描述的链接 ,但不清楚如何将其应用于我的脚本。 有什么建议?

'pandas'图返回AxesSubplot对象,这些对象不能用于生成图例。 您必须使用proxy artist生成您自己的图例。 我修改了你的代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
df={}
bp={}
positions = [1,2,3,4]
df[0]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D'])
df[1]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D'])
colour=['red','blue']
fig, ax = plt.subplots()
for i in [0,1]:
    bp[i] = df[i].plot.box(ax=ax,
                          positions = positions,
                          color={'whiskers': colour[i],
                                 'caps': colour[i],
                                 'medians': colour[i],
                                 'boxes': colour[i]}
                          )

red_patch = mpatches.Patch(color='red', label='The red data')
blue_patch = mpatches.Patch(color='blue', label='The blue data')
plt.legend(handles=[red_patch, blue_patch])

plt.show()

结果如下所示:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM