【问题标题】:Seaborn Scatter plot custom legend showing Single LabelSeaborn 散点图自定义图例显示单个标签
【发布时间】:2021-09-24 18:17:48
【问题描述】:

我使用下面的代码使用 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 scatter-plot


    【解决方案1】:

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

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

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

    图例中的标签来自hue-column中的元素名称。要获取不同的名称,最直接的方法是临时重命名。

    这里是一些示例代码(注意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()
    

    【讨论】:

    • 谢谢。在版本 - 0.11.1 中,我使用 ax.legend(loc = 'upper right') 更改了位置
    猜你喜欢
    • 2021-01-29
    • 2019-07-08
    • 2016-03-29
    • 2018-11-09
    • 2021-10-06
    • 1970-01-01
    • 2019-04-15
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多