使用 Seaborn 创建不同的调色板

Salman Mehmood 2024年2月15日
使用 Seaborn 创建不同的调色板

本文将探讨 Seaborn 调色板的不同选项。我们还将向你展示如何在 Seaborn 中创建自定义调色板。

使用 Seaborn 创建不同的调色板

让我们首先导入 Seaborn 并将其保存为 seaborn。我们还将从名为 tips 的 Seaborn 库中加载一些数据。

import seaborn as seaborn

查看 customer_bill 数据框的顶部,你会发现每个客户留下的账单金额和小费金额都不同。我们也有不同的特点,比如一周中的哪一天或提供那顿饭的时间。

customer_bill = seaborn.load_dataset("tips")
customer_bill.head()

seaborn 调色板 - 输出 1

现在我们将 set_style 设置为 darkgrid 并使用 scatterplot 函数创建散点图。

在这个 scatterplot 函数中,我们将 total_bill 传递给 x 轴,而 y 轴表示 tipdata 属性来自 customer_bill 数据框。

我们还可以将另一列,如 day 的分类列传递给 hue 属性。这将在一周中的每一天分成不同的颜色。

import seaborn as seaborn

# collect data from seaborn
customer_bill = seaborn.load_dataset("tips")
customer_bill.head()
# set grid style
seaborn.set_style("darkgrid")
seaborn.scatterplot(x="total_bill", y="tip", data=customer_bill, hue="day")
# uncomment the below code if you are not using jupyter notebook
# import matplotlib.pyplot as plot
# plot.show()

seaborn 调色板 - 输出 2

如果你注意到,Seaborn 在散点图中使用其默认调色板。我们可以使用 color_palette() 函数检查默认 Seaborn 的调色板。

seaborn.color_palette()

这将显示 Seaborn 用于前四种颜色的默认调色板。

seaborn 调色板 - 输出 3

我们可以在 color_palette() 函数中传递几个选项。如果我们传递一个有效的字符串名称,例如 Pastel2,我们将看到其他调色板。

seaborn.color_palette("Pastel2")

seaborn 调色板 - 输出 4

我们可以使用不同的命名调色板。我们只需要添加这个 palette 参数并将其设置为等于有效的调色板名称。

seaborn.set_style("whitegrid")
seaborn.scatterplot(
    x="total_bill", y="tip", data=customer_bill, hue="day", palette="Pastel2"
)

seaborn 调色板 - 输出 5

目前我们可以在 Seaborn 中使用 170 种不同的命名调色板。如果你忘记了他们的名字,你不必去找他们;你可以传递无效的调色板名称,例如:

seaborn.scatterplot(
    x="total_bill", y="tip", data=customer_bill, hue="day", palette="GH"
)

输出:

seaborn 调色板 - 输出 6

如果你注意到其中很多带有 _r。这些是相同的调色板,但顺序相反。

seaborn.color_palette("Pastel2_r")

seaborn 调色板 - 输出 7

如果我们不传递调色板参数,那么 Seaborn 会设置默认的调色板颜色。

seaborn.scatterplot(x="total_bill", y="tip", data=customer_bill)

seaborn 调色板 - 输出 8

如果我们想更新这些点的颜色,我们将其称为 color。它不是调色板;它是一种颜色,因为我们在整个图形中只有一种颜色,但请注意如果我们将这种颜色切换为蓝色字符串会发生什么。

seaborn.scatterplot(x="total_bill", y="tip", data=customer_bill, color="blue")

这是 Matplotlib 蓝色,而不是 Seaborn 蓝色。

seaborn 调色板 - 输出 9

假设我们想使用 color_palette() 函数提取 Seaborn 蓝色,并选择前两种颜色。这给了我们第一个元组,蓝色,第二个,橙色。

BLUE, ORANGE = seaborn.color_palette()[:2]
seaborn.scatterplot(x="total_bill", y="tip", data=customer_bill, color=BLUE)

seaborn 调色板 - 输出 10

在 Seaborn 中创建自定义调色板

我们可以在 Seaborn 中基于单一颜色或混合多种颜色创建自定义调色板。我们甚至可以创建一个突出显示某个特定类别的调色板。

我们可以通过多种方式使用 Seaborn 创建自定义调色板。如果我们需要这个调色板中的其他颜色,我们可以传递一个整数。

seaborn.color_palette("Pastel2", 10)

seaborn 调色板 - 输出 11

我们还可以通过访问 light_palette() 函数来创建我们的调色板,该方法接受一种命名颜色。此调色板包含一种颜色的不同深浅。

seaborn.light_palette("gray")

seaborn 调色板 - 输出 12

Seaborn 有一个创建深色调色板的 dark_palette() 函数。颜色从较暗的阴影开始,然后上升到指定的颜色。

seaborn.dark_palette("red")

seaborn 调色板 - 输出 13

Seaborn 还允许我们使用这个 blend_palette() 函数创建不同的调色板,参数将是一个颜色列表。这将创建一个调色板,混合我们在列表中传递的所有颜色。

seaborn.blend_palette(["blue", "red", "green"], 12)

seaborn 调色板 - 输出 14

让我们将 blend_palette() 传递给调色板参数。执行此操作时可能会出现错误,因为 blend_palette() 的默认颜色数为六,但我们的 day 列中只有四个不同的类别。

seaborn.scatterplot(
    x="total_bill",
    y="tip",
    data=customer_bill,
    hue="day",
    palette=seaborn.blend_palette(["green", "red"]),
)

输出:

seaborn 调色板 - 输出 15

我们需要传递一个整数,因为我们的 day 列类别存在。

seaborn.scatterplot(
    x="total_bill",
    y="tip",
    data=customer_bill,
    hue="day",
    palette=seaborn.blend_palette(["green", "red"], 4),
)

seaborn 调色板 - 输出 16

Seaborn 为我们提供了使用突出显示调色板的选项,只要我们想强调一个或两个类别,就会使用它。我们将为每个独特的日子创建一个调色板字典。

P_DICT = {k: "gray" for k in customer_bill.day.unique()}
P_DICT

那天的名字将是这个字典的关键。

seaborn 调色板 - 输出 17

如果我们想在图中突出显示星期五,我们可以为我们感兴趣的任何类别分配一个新值 red

P_DICT["Fri"] = "red"
seaborn.scatterplot(
    x="total_bill", y="tip", data=customer_bill, hue="day", palette=P_DICT
)

我们可以看到除了星期五之外所有的日子都是灰色的,用红色着色。如果我们想突出某一天,这可能很有用。

seaborn 调色板 - 输出 18

作者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

相关文章 - Seaborn Color