Seaborn 是一个建立在 Matplotlib 基础上的 Python 可视化库,用于创建各种统计图形和数据可视化。类别散点图(Categorical scatter plots)是用于显示一个或两个分类变量的分布的图表。Seaborn提供了几种函数来创建类别散点图。可以使用 catplot()、stripplot() 和 swarmplot() 来绘制类别散点图,这些函数用于可视化分类变量和数值变量之间的关系。

1、使用 stripplot() 绘制类别散点图

stripplot() 是 Seaborn 中专门用于绘制分类散点图的函数。它将数据点沿着分类轴(通常是 x 轴)分布,并根据分类变量的值进行散开,以避免重叠。stripplot() 适用于小型数据集或分类变量的取值不太密集的情况。常用参数如下,

参数

描述

x

指定分类变量的数据列,通常用于 x 轴。

y

指定数值变量的数据列,通常用于 y 轴。

data

包含数据的 DataFrame 或其他数据结构。

hue

根据另一个分类变量对数据进行分组,

并使用不同的颜色。

order

指定分类变量的顺序。

hue_order

指定 hue 变量的顺序。

orient

指定散点图的方向,可以是

"v"(垂直)或 "h"(水平)。

dodge

控制是否分离散点以避免重叠。

jitter

控制抖动的强度,以避免点的完全重叠。

color

手动设置散点的颜色。

palette

设置颜色调色板,

用于为不同组或类别的数据点分配颜色。

size

设置散点的大小,

可以是常数值或与数据相关的列名。

alpha

设置散点的透明度,范围从01

marker

设置散点的标记样式,

例如圆点、叉号、方块等。

linewidth

设置散点的边框线宽度。

edgecolor

设置散点的边框颜色。

ax

指定 Matplotlib Axes 对象,

用于在其上绘制图表。

使用代码:

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

# 生成示例数据集
tips =  pd.DataFrame({
    'total_bill': [16.99, 10.34, 21.01, 23.68, 24.59],
    'tip': [1.01, 1.66, 3.50, 3.31, 3.61],
    'sex': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'smoker': ['No', 'Yes', 'No', 'Yes', 'No'],
    'day': ['Sun', 'Thur', 'Sat', 'Sun', 'Fri'],
    'size': [2, 3, 3, 2, 4]
})

order = ["Thur", "Fri", "Sat", "Sun"]
# 使用 stripplot() 绘制类别散点图
sns.stripplot(x="day", y="total_bill", data=tips, hue="sex", jitter=True, palette="Set2", order=order)

# 添加标题和标签
plt.title("cjavapy")
plt.xlabel("Day of the Week")
plt.ylabel("Total Bill")

# 显示图例
plt.legend(title="Sex")

plt.draw()
# 显示图表
plt.show()

2、使用 swarmplot() 绘制类别散点图

swarmplot() 也是用于绘制分类散点图的函数,但它在数据点的分布上更加智能,会避免数据点之间的重叠。它会尽量使数据点沿着分类轴均匀分布,不会重叠,因此适用于数据点较密集的情况。swarmplot() 可以更好地可视化数据的分布。常用参数如下,

参数

描述

x

输入数据的变量名,用于横轴。

y

输入数据的变量名,用于纵轴。

hue

数据的变量,用于分类。

data

DataFrame 类型的数据集。

order

控制类别轴上类别的顺序。

hue_order

控制分类变量 hue 的顺序。

dodge

当使用 hue 参数时,设置是否将条带分开。

orient

控制图形的方向('v' 或 'h')。

color

设置所有元素的颜色。

palette

用于给不同级别的 hue 变量设置颜色。

size

点的大小。

edgecolor

点的边缘颜色。

linewidth

点边缘的宽度。

使用代码:

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

# 生成示例数据集
tips =  pd.DataFrame({
    'total_bill': [16.99, 10.34, 21.01, 23.68, 24.59],
    'tip': [1.01, 1.66, 3.50, 3.31, 3.61],
    'sex': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'smoker': ['No', 'Yes', 'No', 'Yes', 'No'],
    'day': ['Sun', 'Thur', 'Sat', 'Sun', 'Fri'],
    'size': [2, 3, 3, 2, 4]
})

# 创建类别散点图
plt.figure(figsize=(8, 6))
sns.swarmplot(x="day", y="total_bill", data=tips, hue="sex", 
              order=["Thur", "Fri", "Sat", "Sun"], 
              dodge=True, palette="Set1", size=6, 
              edgecolor="gray", linewidth=0.8)

# 添加图例和标题
plt.title("cjavapy")
plt.legend(title="Sex")

plt.draw()
# 显示图表
plt.show()

3、使用catplot() 绘制类别散点图

catplot() 是 Seaborn 中用于创建分类图的高级函数,它可以用于绘制多种类型的分类图,包括散点图。可以通过设置 kind 参数为 "strip" 或 "swarm" 来绘制散点图。catplot() 非常灵活,可以使用同一个函数绘制多种不同类型的图表。catplot() 的优点在于它可以轻松添加其他自定义参数,并且可以方便地绘制多个子图。常用参数如下,

参数

描述

data

DataFrame,包含要绘制的数据。

x

字符串,数据中的变量名,

用于绘制在 x 轴的数据。

y

字符串,数据中的变量名,

用于绘制在 y 轴的数据。

hue

字符串,DataFrame 中的变量名,

用于分组颜色编码。

row

字符串,DataFrame 中的变量名,

用于创建基于行的分面网格。

col

字符串,DataFrame 中的变量名,

用于创建基于列的分面网格。

kind

字符串,指定绘制图表的类型

(“strip”, “swarm”, “box”,

“violin”, “boxen”, “point”, “bar”, 或 “count”)。

height

标量,用于设置每个面的高度。

aspect

标量,用于设置每个面的纵横比。

palette

调色板名称、列表或字典,

用于指定不同级别的 hue 变量的颜色。

legend

布尔值或字符串,控制图例的添加。

legend_out

布尔值,确定是否将图例放在图表外面。

使用代码:

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

# 生成示例数据集
tips =  pd.DataFrame({
    'total_bill': [16.99, 10.34, 21.01, 23.68, 24.59],
    'tip': [1.01, 1.66, 3.50, 3.31, 3.61],
    'sex': ['Female', 'Male', 'Male', 'Male', 'Female'],
    'smoker': ['No', 'Yes', 'No', 'Yes', 'No'],
    'day': ['Sun', 'Thur', 'Sat', 'Sun', 'Fri'],
    'size': [2, 3, 3, 2, 4]
})

# 创建类别散点图
sns.catplot(x="day", y="total_bill", hue="smoker", kind="strip", data=tips, 
            height=5, aspect=1, palette="Set2", legend=True, legend_out=True)
            
plt.title("cjavapy")

plt.draw()
# 显示图表
plt.show()

推荐文档