首页 > 解决方案 > Pandas 从 groupby 元素中设置标签图例

问题描述

我正在同一轴上绘制 2 个数据帧的 kde 分布,我需要设置一个图例,说明哪一行是哪个数据帧。现在,这是我的代码:

fig, ax = plt.subplots(figsize=(15,10))

for label, df in dataframe1.groupby('ID'):
     dataframe1.Value.plot(kind="kde", ax=ax,color='r')
for label, df in dataframe2.groupby('ID'):
    dataframe2.Value.plot(kind='kde', ax=ax, color='b')
plt.legend()
plt.title('title here', fontsize=20)
plt.axvline(x=np.pi,color='gray',linestyle='--')
plt.xlabel('mmHg', fontsize=16)
plt.show()

但结果是这样的:在此处输入图像描述

如何将图表内的图例显示为“来自 df1 的值”和“来自 df2 的结果”?

编辑:使用以下代码,我正确地得到了问题的结果。但在某些数据框中,我得到以下结果:

fig, ax = plt.subplots(figsize=(15,10))
sns.kdeplot(akiPEEP['Value'], color="r", label='type 1', ax=ax)
sns.kdeplot(noAkiPEEP['Value'], color="b",label='type 2', ax=ax)
plt.legend()
plt.title('d', fontsize=20)
plt.axvline(x=np.pi,color='gray',linestyle='--')
plt.xlabel('value', fontsize=16)
plt.show()

在此处输入图像描述

我现在正在绘制的分布:

我该如何解决?另外,在这个分布上绘制滚动均值是否很好,或者它变得太重了?

标签: pandasmatplotlib

解决方案


我不确定我是否理解您的问题,但从您的代码来看,您似乎正在尝试为数据框中的每个ID值绘制一个 KDE。在这种情况下,您必须这样做:

for label, df in dataframe1.groupby('ID'):
     df.Value.plot(kind="kde", ax=ax,color='r', label=label)

请注意,我在 for 循环的主体中替换dataframe1dfdf对应于列中所有元素ID都有值的子数据框label


推荐阅读