前言:探索matplotlib的世界

lz作为一个几乎没有py基础的萌新,对py各种强大的开源库早有耳闻,借着这次机会,希望能通过学习matplotlib来打开python的世界的大门。(不是第一次打开了)))

matplotlib是python中一个著名的绘图库,它提供了一系列的绘图函数,可以用来绘制各种图形,包括散点图,折线图,柱状图,饼图,等等。

下载matplotlib的方法也很简单,Windows系统已经安装好了Python代码运行所需的环境,直接在命令行输入这一行代码即可,安装成功后,我们就可以开始绘图了。

1
pip install matplotlib

本文主要介绍了matplotlib的一些基本用法,包括绘制简单的散点图,分析趋势,拟合曲线等功能。(更强悍的功能有待挖掘,并不是库不够强大,只是lz水平有限+已经足够课程要求,只能说是入门级的学习笔记)

附上matplotlib官网:https://matplotlib.org,里面有丰富的教程和示例,强烈建议读者多多参考(能不能看懂又是另一回事)))。

绘制散点图

matplotlib中最简单的绘图方式就是绘制散点图,这里以code coploit给我生成的两组数据为例) 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import numpy as np

# 绘制数据
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y1 = np.array([1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5])
y2 = np.array([1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2, 9.2, 10.2])

# 绘制散点图
plt.scatter(x, y1, label='Group 1') # Group 1为图像的名称,Group 2同理
plt.scatter(x, y2, label='Group 2')

# 设置图例
plt.legend()

# 设置标题和轴标签
plt.title('Example of Scatter Plot') # 标题
plt.xlabel('X-axis') # x轴标签
plt.ylabel('Y-axis') # y轴标签

# 显示图形
plt.show()

可以复制代码查看运行结果,运行结果如下:

可以看到,matplotlib绘制的散点图非常直观,请读者对照着代码尝试理解。

下面提供几种常见的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 设置图例的位置,'upper left'表示左上角
plt.legend(['Group 1', 'Group 2'], loc='upper left')

# 设置坐标轴范围
plt.xlim(0, 10)
plt.ylim(0, 11)

# 设置x轴刻度
plt.xticks([1, 3, 5, 7, 9])
# 或者如下,2为步进值
plt.xticks(np.arange(1, 11, 2))

# 设置点的颜色
plt.scatter(x, y1, c='r', label='Group 1')
# 'r'表示红色,其他颜色代码请参考matplotlib官网,'Group 1'为图像的名称

至此掌握这几种函数我们已经能绘制一些简单的散点图了,气泡图,三维图,热力图等功能请自行查找相关资料。

使用散点图拟合曲线

matplotlib中有很多函数可以用来拟合曲线,这里以拟合一条直线函数为例,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr # 计算相关系数 引入pearsonr函数

x = [1, 2, 3, 1.5, 4, 2.5, 6, 4, 3, 5.5, 5, 2]
y = [3, 4, 8, 4.5, 10, 5, 15, 9, 5, 16, 13, 3]

plt.scatter(x, y, color="red")
plt.title("Scatter Plot of the data")
plt.xlabel("X")
plt.ylabel("Y")

linear_model = np.polyfit(x, y, 1) # 拟合一条直线
linear_model_fn = np.poly1d(linear_model) # 得到拟合函数
x_s = np.arange(0, 7) # 定义x轴范围
plt.plot(x_s, linear_model_fn(x_s), color="green") # 绘制拟合曲线

# 计算相关系数
corr, _ = pearsonr(x, y)
print("相关系数:", corr)
# 相关系数r

# 计算拟合曲线与原始数据的误差
y_pred = linear_model_fn(x)
mse = np.mean((y_pred - y) ** 2)
print("MSE:", mse)
# 均方误差

# 计算拟合曲线的拟合程度
r_squared = 1 - (mse / np.var(y))
print("拟合程度:", r_squared)
# 拟合程度r^2

# 得到拟合曲线的截距和斜率
print("截距:", linear_model[1])
print("斜率:", linear_model[0])

plt.show()

运行代码结果如下:


保存之后运行代码,可以看到相关系数,MSE,拟合程度,截距,斜率等信息

(Python运行结果的很多信息都需要自己用print打印出来,并不代表他没有求)。
matplotlib已经帮我们找到一条一次函数拟合曲线,这条曲线与原始数据有着很强的相关性,想拟合更高阶的曲线,例如二次函数,把degree参数改成2即可。

tips:
想绘制折线图可以加上以下代码:

1
plt.plot(x, y,'b-', color="blue") # 'b-'表示为蓝色的折线,其他用法请参考matplotlib官网,请注意折线连接方式,为了确保折线方向一致,请将x轴数据从小到大排列

12.5更新:坐标值需要无穷时,可用float('inf')代替(实际上如果不知道的话,可以像我一样用coploit让他自己生成出来)))
至此先停笔,有新的需求时会再补充。