matplotlib经典案例及基本使用
代码文件:https://github.com/Xu107/Data-Analysis/blob/main/matplotlib1.ipynb
一、matplotlib基本使用
以一个简单的折线图为例
包括:设置显示中文字体、添加x,y轴刻度、构造x,y轴刻度标签、添加网格显示、添加描述信息、图像保存等。
为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用
假设需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度

完整代码:
import matplotlib.pyplot as plt import random from pylab import mpl #设置显示中文字体 mpl.rcParams["font.sans-serif"]=["SimHei"] #设置正常显示符号 mpl.rcParams["axes.unicode_minus"]=False #0.准备数据 x=range(60) y_shanghai=[random.uniform(15,18) for i in x] #1.创建画布 plt.figure(figsize=(20,8),dpi=100) #2.绘制图像 plt.plot(x,y_shanghai) #2.1添加x,y轴刻度 #构造x,y轴刻度标签 x_ticks_label=["11点{}分".format(i) for i in x] y_ticks=range(40) #刻度显示 plt.xticks(x[::5],x_ticks_label[::5]) plt.yticks(y_ticks[::5]) ##2.2 添加网格显示 plt.grid(True,linestyle="--",alpha=0.5) ##2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图",fontsize=20) ##2.4 图像保存 plt.savefig("./test.png") #3.图像显示 plt.show()
二、在一个坐标系中绘制多个图片
需求:再添加一个城市的温度变化
收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示

完整代码:
# 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1,3) for i in x] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.plot(x, y_shanghai, label="上海") plt.plot(x, y_beijing, color="r", linestyle="--", label="北京") # 2.1 添加x,y轴刻度 # 构造x,y轴刻度标签 x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40) # 刻度显示 plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5]) # 2.2 添加网格显示 plt.grid(True, linestyle="--", alpha=0.5) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 2.5 添加图例 #注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。 plt.legend(loc=0) # 3.图像显示 plt.show()
在plt.plot中设置图形风格:
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
三、多个坐标系显示— plt.subplots(面向对象的画图方法)
如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系当中,效果如下:

可以通过subplots函数实现(旧的版本中有subplot,使用起来不方便),推荐subplots函数
matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图

关于axes子坐标系的更多方法:参考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。
完整代码:
# 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1, 5) for i in x] # 1.创建画布 # plt.figure(figsize=(20, 8), dpi=100) fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100) # 2.绘制图像 # plt.plot(x, y_shanghai, label="上海") # plt.plot(x, y_beijing, color="r", linestyle="--", label="北京") axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京") # 2.1 添加x,y轴刻度 # 构造x,y轴刻度标签 x_ticks_label = ["11点{}分".format(i) for i in x] y_ticks = range(40) # 刻度显示 # plt.xticks(x[::5], x_ticks_label[::5]) # plt.yticks(y_ticks[::5]) axes[0].set_xticks(x[::5]) axes[0].set_yticks(y_ticks[::5]) axes[0].set_xticklabels(x_ticks_label[::5]) axes[1].set_xticks(x[::5]) axes[1].set_yticks(y_ticks[::5]) axes[1].set_xticklabels(x_ticks_label[::5]) # 2.2 添加网格显示 # plt.grid(True, linestyle="--", alpha=0.5) axes[0].grid(True, linestyle="--", alpha=0.5) axes[1].grid(True, linestyle="--", alpha=0.5) # 2.3 添加描述信息 # plt.xlabel("时间") # plt.ylabel("温度") # plt.title("中午11点--12点某城市温度变化图", fontsize=20) axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20) axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("./test.png") # 2.5 添加图例 # plt.legend(loc=0) axes[0].legend(loc=0) axes[1].legend(loc=0) # 3.图像显示 plt.show()
四、plt.plot()除了可以画折线图,也可以用于画各种数学函数图像
完整代码:
import numpy as np # 0.准备数据 x = np.linspace(-10, 10, 1000) y = np.sin(x) # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制函数图像 plt.plot(x, y) # 2.1 添加网格显示 plt.grid() # 3 图像保存 plt.savefig("./test.png") # 4.显示图像 plt.show()
五、总结
1、添加x,y轴刻度
plt.xticks()
plt.yticks()
注意:在传递进去的第一个参数必须是数字,不能是字符串,如果是字符串吗,需要进行替换操作
2、添加网格显示
plt.grid(linestyle="--", alpha=0.5)
3、添加描述信息
plt.xlabel()
plt.ylabel()
plt.title()
4、图像保存
plt.savefig("路径")
5、多次plot
直接进行添加就OK
6、显示图例
plt.legend(loc="best")
注意:一定要在plt.plot()里面设置一个label,如果不设置,没法显示
7、多个坐标系显示
plt.subplots(nrows=, ncols=)
8、折线图的应用
1).应用于观察数据的变化
2).可是画出一些数学函数图像