首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是seaborn.lineplot色调参数中的错误吗?

这是seaborn.lineplot色调参数中的错误吗?
EN

Stack Overflow用户
提问于 2020-05-25 22:30:58
回答 2查看 680关注 0票数 3

有了这个代码片段,我希望得到一个每个色调都有一条线的线条图,它有以下不同的值: 1,5,10,20,40。

代码语言:javascript
复制
import math
import pandas as pd
import seaborn as sns

sns.set(style="whitegrid")

TANH_SCALING = [1, 5, 10, 20, 40]
X_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
COLUMNS = ['x', 'y', 'hue group']

tanh_df = pd.DataFrame(columns=COLUMNS)

for sc in TANH_SCALING:
    data = {
        COLUMNS[0]: X_VALUES,
        COLUMNS[1]: [math.tanh(x/sc) for x in X_VALUES],
        COLUMNS[2]: len(X_VALUES)*[sc]}
    tanh_df = tanh_df.append(
        pd.DataFrame(data=data, columns=COLUMNS),
        ignore_index=True
    )

sns.lineplot(x=COLUMNS[0], y=COLUMNS[1], hue=COLUMNS[2], data=tanh_df);

但是,我得到的是一个色调图例,值为0、15、30、45,另外还有一行,如下所示:

这是一个bug,还是我遗漏了一些明显的东西?

EN

回答 2

Stack Overflow用户

发布于 2020-05-25 22:34:50

当色调可以转换为整数时,这是一个已知的seaborn错误。您可以向色调添加前缀,以便转换为整数失败:

代码语言:javascript
复制
for sc in TANH_SCALING:
    data = {
        COLUMNS[0]: X_VALUES,
        COLUMNS[1]: [math.tanh(x/sc) for x in X_VALUES],
        COLUMNS[2]: len(X_VALUES)*[f'A{sc}']}             # changes here
    tanh_df = tanh_df.append(
        pd.DataFrame(data=data, columns=COLUMNS),
        ignore_index=True
    )

输出:

或者在创建数据之后:

代码语言:javascript
复制
# data creation
for sc in TANH_SCALING:
    data = {
        COLUMNS[0]: X_VALUES,
        COLUMNS[1]: [math.tanh(x/sc) for x in X_VALUES],
        COLUMNS[2]: len(X_VALUES)*[f'A{sc}']}
    tanh_df = tanh_df.append(
        pd.DataFrame(data=data, columns=COLUMNS),
        ignore_index=True
    )


# hue manipulation
sns.lineplot(x=COLUMNS[0], y=COLUMNS[1], 
             hue='A_' + tanh_df[COLUMNS[2]].astype(str), # change hue here
             data=tanh_df);
票数 2
EN

Stack Overflow用户

发布于 2020-05-26 03:14:25

正如@LudvigH对另一个答案的评论所说,这不是一个bug,即使在这种情况下默认行为是令人惊讶的。正如docs中所解释的

色调(以及较小范围的大小)语义的默认处理(如果存在)取决于变量是被推断为表示“数字”数据还是“分类”数据。特别是,默认情况下,数值变量使用顺序色彩映射表表示,并且图例条目显示常规的“刻度”,其中的值可能存在于数据中,也可能不存在。可以通过各种参数来控制此行为,如下所述和图示。

这里有两种控制行为的具体方法。

如果要保留数值颜色映射但使图例显示数据中的确切值,请设置legend="full"

代码语言:javascript
复制
sns.lineplot(x=COLUMNS[0], y=COLUMNS[1], hue=COLUMNS[2], data=tanh_df, legend="full")

如果您希望seaborn将hue参数的级别视为离散的类别值,请传递一个命名的类别色彩映射表,或者要使用的特定颜色的列表或字典:

代码语言:javascript
复制
sns.lineplot(x=COLUMNS[0], y=COLUMNS[1], hue=COLUMNS[2], data=tanh_df, palette="deep")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62004561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档