无法在 seaborn distplot 中显示图例
Posted
技术标签:
【中文标题】无法在 seaborn distplot 中显示图例【英文标题】:Unable to show legend in seaborn distplot 【发布时间】:2017-12-11 14:07:49 【问题描述】:我不熟悉在 python 中绘图并尝试使用以下代码在 seaborn
中绘制分布,但无法在绘图上看到图例,即 test_label1
和 test_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 中显示图例的主要内容,如果未能解决你的问题,请参考以下文章
Python Seaborn:在 Facetgrid 中绘制多个 distplot
在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)
如何在 seaborn distplot 的 bin 中心标记 xticks?