显示单个标签的 Seaborn 散点图自定义图例

Seaborn Scatter plot custom legend showing Single Label

我使用下面的代码使用 seaborn 绘制散点图。我需要更改图例中的标签文本。但是当我为图例添加自定义文本时,它只显示一个标签。我需要将图例文本设为 ['set'、'versi'、'vir']。代码如下-

import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")

scatter = sns.scatterplot(x='sepal_length', y ='sepal_width', hue='species', data=iris, legend=False)
scatter.legend(labels = ['set', 'versi', 'vir'], loc='upper right')
plt.show(scatter)

Seaborn 复杂的工作方式并不总是遵循标准图例所需的规则(参见 issue 2280)。通常,图例是自定义创建的。目前,matplotlib 不提供简单的函数来移动(或更改)这样的图例。

在seaborn 0.11.2中,添加了一个功能sns.move_legend(ax, ...) (info on github),可以移动图例并改变一些其他属性(但不是标签)。

所以,你可以先让sns.scatterplot创建一个图例,然后移动它。

图例中的标签来自色调列中的元素名称。要获得不同的名称,最直接的方法就是临时重命名。

下面是一些示例代码(注意 plt.show() 没有 ax 作为参数,但有一个可选的 block= 参数):

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")

ax = sns.scatterplot(x='sepal_length', y='sepal_width', hue='species',
                     data=iris.replace({'species': {'setosa': 'set', 'versicolor': 'versi', 'virginica': 'vir'}}))
sns.move_legend(ax, loc='upper right')
plt.show()