首页 > 编程笔记 > Python笔记 阅读:18

Seaborn scatterplot():创建散点图(附带实例)

散点图主要用于展示数据的分布情况,在 Seaborn 中可以使用 scatterplot() 函数创建散点图。

创建基本散点图

使用 scatterplot() 函数创建散点图时,需要指定的几个主要参数仍然是 data、x 和 y,它们的含义与前面介绍过的 barplot() 和 lineplot() 函数的同名参数相同,Seaborn 中的大多数绘图函数都包含这几个参数。

分析下面的代码:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style({'font.sans-serif': 'SimSun'})
month  = range(1, 10)
counts = [20, 30, 70, 50, 90, 60, 40, 10, 80]
title = ['月份', '数量']
data  = dict(zip(title, [month, counts]))
sns.scatterplot(data, x=title[0], y=title[1])
plt.show()
程序将创建如下图所示的散点图:


图 1 散点图

更改点的形状和大小

为 scatterplot() 函数指定 marker 和 s 两个参数,可以更改点的形状和大小。

下面的代码将散点图中各个点的形状更改为菱形:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style({'font.sans-serif': 'SimSun'})
month  = range(1, 10)
counts = [20, 30, 70, 50, 90, 60, 40, 10, 80]
title = ['月份', '数量']
data  = dict(zip(title, [month, counts]))
sns.scatterplot(data, x=title[0], y=title[1], marker='D')
plt.show()
效果如下图所示:


图 2 更改点的形状

下面的代码将散点图中各个点的形状设置为菱形,各个点的大小为 100 个像素:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style({'font.sans-serif': 'SimSun'})
month  = range(1, 10)
counts = [20, 30, 70, 50, 90, 60, 40, 10, 80]
title = ['月份', '数量']
data  = dict(zip(title, [month, counts]))
sns.scatterplot(data, x=title[0], y=title[1], marker='D', s=100)
plt.show()
效果如下图所示:


图 3 设置点的大小

在散点图中添加特征标记

如需根据某一组数据对散点图中的各个点从外观上进行区分,可以为 scatterplot() 函数指定 hue、size 和 style 三个参数之一或全部:
Seaborn 中的很多绘图函数都包含这 3 个参数中的一个或多个。

下面的代码根据产品等级(由 grade 变量提供)自动调整各个点的大小:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style({'font.sans-serif': 'SimSun'})
month  = range(1, 10)
counts = [20, 30, 70, 50, 90, 60, 40, 10, 80]
grade  = list('ABCABBCCC')
title = ['月份', '数量', '等级']
data  = dict(zip(title, [month, counts, grade]))
sns.scatterplot(data, x=title[0], y=title[1], size=title[2])
plt.show()
效果如下图所示:


图 4 以点的大小反映产品的不同等级

下面的代码同时使用 hue、size 和 style 三个参数,通过点的颜色、大小和形状来反映产品的不同等级:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style({'font.sans-serif': 'SimSun'})
month  = range(1, 10)
counts = [20, 30, 70, 50, 90, 60, 40, 10, 80]
grade  = list('ABCABBCCC')
title = ['月份', '数量', '等级']
data  = dict(zip(title, [month, counts, grade]))
sns.scatterplot(
    data,
    x=title[0], y=title[1],
    hue=title[2], size=title[2], style=title[2]
)
plt.show()
效果如下图所示:


图 5 同时使用hue、size和style三个参数

相关文章