【问题标题】:How to set seaborn color palette for multiple categories?如何为多个类别设置 seaborn 调色板?
【发布时间】:2019-05-15 21:16:09
【问题描述】:

我正在传递要使用 pd.scatterplot 绘制的 pandas 数据框,并希望使用 'bright' 调色板。颜色将由我作为hue 传递给绘图函数的整数系列中的值确定。

问题在于,这只适用于hue 系列只有两个不同值的情况。当它只有一个或超过 2 个不同的值时,绘图默认为米色到紫色的调色板。

当使用sns.set_palette('bright') 设置调色板时,一切都会如上文所述发生。但是,当我在绘图函数调用中执行palette='bright'并且 n_classes 为 != 2)时,我会抛出一个明确的值错误:

ValueError: Palette {} not understood

复制代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_palette('bright')        # first method

n_classes = 3

a = np.arange(10)
b = np.random.randn(10)
c = np.random.randint(n_classes, size=10)

s = pd.DataFrame({'A': a, 'B':b, 'C': c})

sns.scatterplot(data=s, x='A', y='B', hue='C')
plt.show()

对于第二种方法,只需将散点图调用更改为

sns.scatterplot(data=s, x='A', y='B', hue='C', palette='bright')

有没有办法在我想要的调色板中获得多个色调级别?我做错了什么还是这是一个错误?

【问题讨论】:

    标签: python pandas matplotlib plot seaborn


    【解决方案1】:

    你需要传递颜色的数量

    类似的东西。

    sns.scatterplot(data=s,
                    x='A',
                    y='B',
                    hue='C',
                   palette=sns.color_palette('bright', s.C.unique().shape[0])
                   )
    

    【讨论】:

    • 解决了我的问题,但这是一种解决方法。毕竟,seaborn教程中给出的这个例子很好用:sns.set_palette('bright')tips = sns.load_dataset("tips")sns.scatterplot(x="total_bill", y="tip", hue="day", data=tips)
    • 在 seaborn 问题跟踪器上发现问题 #s 17221653 似乎来自同一源问题。解决此问题的另一种方法是传递无法转换为布尔值或数值的色调值。
    猜你喜欢
    • 2022-01-17
    • 2021-06-16
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2018-10-15
    • 2022-01-12
    • 2021-03-16
    • 2022-01-03
    相关资源
    最近更新 更多