【问题标题】:Getting error: No handles with labels found to put in legend. when moving legend outside of the box when plotting with kdeplot with searborn出现错误:没有发现带有标签的句柄放在图例中。使用 kdeplot 和 searborn 进行绘图时,将图例移出框外
【发布时间】:2021-05-25 09:17:15
【问题描述】:

我正在使用 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()

我尝试使用 g.legend(loc='center left', bbox_to_anchor=(1, 0.5)) [link] 行将 legend 重新定位到框外。

相反,编译器返回错误

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

此外,图例不是完整的图例,而是如下图中红色箭头所示的小矩形。

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

【问题讨论】:

  • 你可以试试 (1.25, 0.5) 而不是 (1, 0.5)。

标签: python plot seaborn


【解决方案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()

输出:

【讨论】:

  • 谢谢大卫,但我认为当一个人想在另一个斧头上附加另一个斧头时,这种方式可能会出现问题。
  • 你能举个例子吗?
  • 例如:ax=sns.kdeplot(data=df0, x="centre_point",hue='feature', bw_adjust=0.5) ax=sns.kdeplot(data=df1, x="centre_point",hue='feature', bw_adjust=0.5,ax=ax) 通常,将ax 传递到第二个句柄以在一个绘图中获取多个kde。我将制作一个示例数据,并可能发布新的 OP 以更好地解释这一点
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 2019-05-23
  • 2020-05-06
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多