Matplotlib 散点图

Matplotlib 散点图函数

在 Matplotlib 中,我们可以使用 scatter() 函数来绘制一个散点图。散点图的主要作用有以下 2 个。

  • 变量之间是否存在关联趋势,并且这个关联趋势是线性的还是非线性的。
  • 判断是否有离群点(也叫异常点),也就是偏移量比较大的点。

语法:

plt.scatter(x, y)

说明:

参数 x 存放的是所有点的 x 轴坐标,参数 y 存放的是所有点的 y 轴坐标,它们可以是列表数组、Series 等。

提示: 如果想要了解如何绘制 3D 散点图,另请参阅:Matplotlib 3D 散点图

示例 1:基本散点图

import matplotlib.pyplot as plt

# 绘图
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [15, 12, 14, 12, 11, 14, 13, 12]
plt.scatter(x, y) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制基本散点图

示例 2:正态分布散点图

import matplotlib.pyplot as plt
import numpy as np

# 绘图
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y, alpha=0.8) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制正态分布散点图

分析:

np.random.randn(n) 用于生成 n 个符合正态分布的样本数据。

Matplotlib 散点图样式

在 Matplotlib 中,为了让散点图更加的美观,scatter() 函数还提供了很多用于定义样式的参数,常用的如下表所示。

scatter() 函数的样式参数
参数 说明
marker 散点的形状
s 散点的大小(size)
color 散点的颜色(color)
alpha 散点的透明度(0.0~1.0)

示例 3:散点的形状

import matplotlib.pyplot as plt

# 绘图
x= [1, 2, 3, 4, 5, 6, 7, 8]
y = [15, 12, 14, 12, 11, 14, 13, 12]
plt.scatter(x, y, marker='x') 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib改变散点的形状

分析:

marker='x' 用于定义散点的形状为 “x”。marker 参数的取值有非常多,它的取值和折线图 plot() 函数中的 marker 参数的取值是一样的,小伙伴们可以翻一下 “Matplotlib 折线图” 这一节。

示例 4:颜色、大小、透明度

import matplotlib.pyplot as plt

# 绘图
x= [1, 2, 3, 4, 5, 6, 7, 8]
y = [15, 12, 14, 12, 11, 14, 13, 12]
plt.scatter(x, y, s=80, color='red', alpha=0.3) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib改变折线的颜色、大小、透明度

分析:

plt.scatter(x, y, s=80, color='red', alpha=0.3) 表示定义散点的大小为 80,颜色为红色,透明度为 0.3。

Matplotlib 散点图案例

在当前项目下的 data 文件夹中有一个 clothes.csv 文件,项目结构如下图所示。其中,clothes.csv 文件保存的某衣服店一年内每个月中上衣和裤子的销量(单位:件),内容如下图所示。

Matplotlib散点图的项目结构

clothes.csv的数据

示例 5:一组散点

import pandas as pd
import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
df = pd.read_csv('data/clothes.csv')
# 绘制图表
plt.scatter(df['月份'], df['上衣'])

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制一组散点

示例 6:多组散点

import pandas as pd
import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
df = pd.read_csv('data/clothes.csv')
# 绘制图表
plt.scatter(df['月份'], df['上衣'])
plt.scatter(df['月份'], df['裤子'], marker='v')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制多组散点

分析:

想要同时绘制多组散点,我们只需要调用多次 scatter() 函数就可以了。当然了,为了区分不同组,我们可以使用 marker 来改变一下散点的外观。

Matplotlib 气泡图

在 Matplotlib 中,我们可以使用 scatter() 函数的 s 参数来绘制一个气泡图。需要注意的是,此时 s 参数的值要求是一个列表。

示例 7:气泡图

import matplotlib.pyplot as plt

# 绘图
x = range(1,11)
y = [8, 38, 22, 43, 10, 39, 54, 33, 52, 16]
plt.scatter(x, y, s=y) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制气泡图

分析:

参数 s 代表了点的大小,它的值可以是一个整数,也可以是一个列表。当取值为整数时,表示所有点的大小是一样的;当取值为列表时,此时会根据列表的值来定义每一个点的大小。

如果我们将 s 设置成与每个散点的数据大小一样,那么散点的大小就代表了数据的大小了,这样呈现出来的效果就是一个 “气泡图”。

其实上面这个例子的效果并不是很明显,我们可以让列表 y 中所有元素同时放大 5 倍,然后再赋值给参数 s,请看下面例子。

示例 8:改进后

import matplotlib.pyplot as plt

# 绘图
x = range(1,11)
y = [8, 38, 22, 43, 10, 39, 54, 33, 52, 16]
# 将元素放大5倍
sizes = [item*5 for item in y]
plt.scatter(x, y, s=sizes) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib放大气泡

示例 9:气泡使用不同颜色

import matplotlib.pyplot as plt
import random

# 生成随机颜色
def randomcolor():
    colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    color = ''
    for i in range(6):
        color += colorArr[random.randint(0,14)]
    return '#'+color

# 生成随机颜色的列表
colors = []
for i in range(10):
    colors.append(randomcolor())

# 绘图
x = range(1,11)
y = [8, 38, 22, 43, 10, 39, 54, 33, 52, 16]
sizes = [item*5 for item in y]
plt.scatter(x, y, s=sizes, color=colors) 

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib气泡使用不同颜色

分析:

参数 color 和参数 s 一样,它除了可以是一个值之外,还可以是一个列表。当它取值为列表时,表示为每一个元素采用不同的颜色。

上一篇: Matplotlib 折线图

下一篇: Matplotlib 柱状图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号