无法在 seaborn distplot 中显示图例

Posted

技术标签:

【中文标题】无法在 seaborn distplot 中显示图例【英文标题】:Unable to show legend in seaborn distplot 【发布时间】:2017-12-11 14:07:49 【问题描述】:

我不熟悉在 python 中绘图并尝试使用以下代码在 seaborn 中绘制分布,但无法在绘图上看到图例,即 test_label1test_label1

import matplotlib.pylab as plt
import seaborn as sns
import numpy as np

plt.figure("Test Plots")
lst1 = list(np.random.rand(10))
lst2 = list(np.random.rand(10))
sns.distplot(lst1, label='test_label1', color="0.25")
sns.distplot(lst2, label='test_label2', color="0.25")

plt.show()

【问题讨论】:

plt.legend()? 谢谢@DavidG。这可行,但唯一的问题是我必须在最后单独做。所以像plt.legend(['test_label1', 'test_label2']) 这样的东西需要记住顺序。 您不必这样做,因为您已经在情节中指定了label=。在plt.show() 之前调用plt.legend() 会起作用(对我有用) 【参考方案1】:

由于您已经在 sns.distplot 中使用 label= 标记了您的地块,因此您所要做的就是展示您的图例。这是通过在 plt.show() 之前添加 plt.legend() 来完成的

更多关于matplotlib图例的信息可以在documentation找到

【讨论】:

这真的是“Seaborn 方式”,直接使用 matplotlib 作为图例吗? @matanster 我真的没有看到任何问题,因为 seaborn 本质上只是 matplotlib 的包装器。有一些方法可以仅使用 sns.distplot 的参数来显示图例,但是 IMO 并不那么简单【参考方案2】:

通过使用fig.legend,我们可以在分布图中显示图例。 这里,labels 的参数数组被传递给函数。 图例中的标签也将显示为数组值的顺序。

import seaborn as sns
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,6))
lst1 = list(np.random.rand(10))
lst2 = list(np.random.rand(10))
sns.distplot(lst1)
sns.distplot(lst1)
fig.legend(labels=['test_label1','test_label2'])
plt.show()

【讨论】:

纯代码答案被视为低质量帖子,edit您的答案并添加一些解释【参考方案3】:

我发现使用“fig.legend()”将labels添加到seaborn histogram中的legend的一些问题>。它在图例中反转颜色顺序而不改变直方图条的颜色...

fig.legend(labels=['label1','label2',...])

Histogram before using fig.legend()

Histogram after using fig.legend()

模块版本:

seborn '0.11.0' matplotlib '3.1.3'

简单的解决方案是通过应用label_list.reverse() 来颠倒label_list 的顺序,但我不认为这是一个好的解决方案。我不知道发生了什么以及如何阻止反转图例中的颜色顺序。

【讨论】:

以上是关于无法在 seaborn distplot 中显示图例的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn:具有相对频率的 distplot()

Python Seaborn:在 Facetgrid 中绘制多个 distplot

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)

如何在 seaborn distplot 的 bin 中心标记 xticks?

在 seaborn distplot KDE 估计中限制 x 的范围

如何在 Seaborn distplot 中绘制 Pandas 日期时间序列?