出现错误:找不到带有标签的句柄来放入图例中。将图例移出框外时 使用 kdeplot 和 searborn 进行绘图时

pol*_*ian 5 python plot seaborn

我正在使用seaborn kdeplot 绘制kde 图。

time_window_order=['272','268','264','260','256','252','248','244','240']
order_dict = {k:i for i,k in enumerate(time_window_order)}
df =DataFrame ({'time_window':['268','268','268','264','252','252','252','240',
                               '256','256','256','256','252','252','252','240'],
                'seq_no':['a','a','a','a','a','a','a','a',
                          'b','b','b','b','b','b','b','b']})
df['centre_point'] = df['time_window'].map(order_dict)

g =sns.kdeplot(data=df, x="centre_point",hue='seq_no', bw_adjust=0.8);plt.xlim(0,len(time_window_order)-1);plt.grid()
g.legend(loc='center left', bbox_to_anchor=(1, 0.5)) # move legend outside the box
plt.xticks(ticks = range(0,len(time_window_order)) ,labels = time_window_order, rotation = 'vertical')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我尝试使用[link]legend线重新定位盒子外部。g.legend(loc='center left', bbox_to_anchor=(1, 0.5))

相反,编译器返回错误

未发现带有标签的句柄可放入图例中。

此外,图例不是完整的图例,而是看起来像一个小矩形,如下图红色箭头所示。 在此输入图像描述

我可以知道如何解决这个问题吗?

Dav*_* M. 1

Seaborn 不能很好地处理图例;您可以使用此解决方法:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

time_window_order=['272','268','264','260','256','252','248','244','240']
order_dict = {k:i for i,k in enumerate(time_window_order)}
df = pd.DataFrame ({'time_window': ['268','268','268','264','252','252','252','240',
                                    '256','256','256','256','252','252','252','240'],
                    'seq_no': ['a','a','a','a','a','a','a','a',
                               'b','b','b','b','b','b','b','b']})
df['centre_point'] = df['time_window'].map(order_dict)

g = sns.FacetGrid(df, hue="seq_no", height=6, aspect=1.5)
g = (g.map(sns.kdeplot, "centre_point", bw_adjust=0.8))

plt.xlim(0, len(time_window_order)-1)
plt.ylabel('density')
plt.legend(bbox_to_anchor=(1.2, 0.5))
plt.tight_layout()
plt.xticks(ticks=range(0, len(time_window_order)), labels=time_window_order, rotation='vertical')
plt.grid()

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

输出:

KDE图