提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
最近学习中,发现好久没有使用过matplotlib绘图,语法生疏了,基本语法都要询问ChatGPT,在本博客中对一些常用语法进行复习一下,个人能力有限,有错误再所难免欢迎大家评论区指正。
注:本博客所有演示均在jupyter中演示。
1 解决中文乱码的两行代码和一个多个子图设置全局字体大小(让图比例更加协调的一行代码)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体或其他中文字体名称
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
# 设置全局的字体大小
plt.rc('font', size=30)
plt.grid(True) # 绘图添加网格的代码,加上也会使得图更好看些
一、matplotlib是什么?
Matplotlib是一个用于绘制图表和数据可视化的Python库。它提供了一种类似于MATLAB的绘图接口,可以创建各种类型的图表,如折线图、散点图、直方图、饼图等。Matplotlib非常灵活,用户可以自定义图表的各个方面,包括线条样式、颜色、标签、图例等。这使得Matplotlib成为科学计算、数据分析和机器学习等领域中常用的工具之一。
二、matplotlib入门
1.引入库
import matplotlib.pyplot as plt
2. figure对象
figure对象理解成一张画布,有了这张画布我们才能在这张画布上面画图。
fig = plt.figure()
输出:
可以看到是一个figure对象。
3. subplot子图
(1)子图创建方式1
有了画布,想想现实中一张画布只能画一张图吗?显然不是的,可以分区域画不同的图。这样也是的,将一个子图分成不同区域的子图,我们可以在不同子图上面画不同图像。
.add_subplot(a,b,c) 方法 — 向figure对象中添加子图, a,b是子图的分块情况,c是你选取的那个子图位置。
. add_subplot返回的是AxesSubplot子图对象
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
plt.show()
输出:
翻阅过很多书籍,都是一上来直接画图,最基本的基本都没有提及,因此给读者一种很混乱的感觉,介绍了上面两个最大的API接口在上手下面的具体绘图,思路就会清晰很多了。
(1)子图创建方式2 —(最近发现这种用法也挺好用的,plt.subplots())
import matplotlib.pyplot as plt
# 使用子图对象的方式
fig, ax = plt.subplots(2,2,constrained_layout=True, figsize=(16,8))
# constrained_layout=True 自适应布局,防止子图有互相遮盖的情况
# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 1, 4, 5]
x1 = [2,3,4,5,6]
y1= [3,4,5,6,7]
# 绘制散点图
# 另外如果是一行子图的画,用ax[0]这样也是可以的
ax[0,0].scatter(x, y, color ='red', linestyle = '--',marker = '+',label = 'line')
# 添加标题和标签
# ax1.title('Scatter Plot Example')
ax[0,0].set_title('Scatter Plot Example')
ax[0,0].set_xlabel('X-axis')
ax[0,0].set_ylabel('Y-axis')
# 子图里面添加标签不光要签名加速 label属性,还要加上下面这行代码
ax[0,0].legend()
# 绘制折线图
ax[1,0].plot(x, y, color ='red', linestyle = '--',marker = '+',label = 'line1')
ax[1,0].plot(x1, y1, color ='blue', linestyle = '-',marker = 'o', label = 'line2')
# 添加标题和标签
ax[1,0].set_title('Line Plot Example')
ax[1,0].set_xlabel('X-axis')
ax[1,0].set_ylabel('Y-axis')
ax[1,0].legend()
# 在整个大图上设置标题
fig.suptitle('Overall Title', fontsize=16)
# 显示图形
plt.show()
【注】:图的比例figsize=(16,8)要自己不断尝试,结合# 设置全局的字体大小
plt.rc(‘font’, size=30)可以调整全局字体。需要不断尝试才能找到最佳比例
三、matplotlib画图
1. 散点图、折线图
开始画图之前,先来讲一个很重要的事实,我们分了那么多子图,怎么控制在哪一个子图上面画图呢?
- 直接利用子图对象上的画图方法
类似 ax.plot()这种调用方法,但在实际中我发现没有语法提示这样,效率很慢,时间画在这个上面感觉很浪费,因此我并不建议 - 直接使用plt.这种方法,不指定任何子图(比较推荐这种)
那么问题来了,不指定子图怎么知道画哪里呢?其实很好解决,plt默认追踪其前面的第一章画布,我们只要在对于位置写入画图代码就能准确控制了。另外这种方式就减少了很多不必要的麻烦。
下面几个例子分别对上述方法进行了演示,文字叙述可能不是很清晰,看演示就明白了
1.1 单独一张画布
fig = plt.figure()
x = [1,2,3,4,5]
y = [5,6,7,8,9]
x1 = [5,4,3