显示单个标签的 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()
我使用下面的代码使用 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()