Matplotlib是Python最常使用的数据可视化库, 本文通过具体案例, 学会Python的Matplotlib库绘图使用.
希望通过不断迭代补充, 做到一文从入门到精通Matplotlib.
目录
1, 入门基本语法
语法点:
- 创建画布
figure() - 绘制图像
plot() - 显示图像
show()
示例1: 输出一周7天气温变化折线图
![](https://i-blog.csdnimg.cn/blog_migrate/bb5d0f93f83e742ea54518e375dcce63.png)
# 导入工具库
import matplotlib.pyplot as plt
# 1, 创建画布
plt.figure(figsize=(20,8),dpi=100)
# 2, 绘制图像
plt.plot([1, 2, 3, 4, 5, 6 ,7], [20,22,18,19,17,21,23])
# [3], 保存图像
plt.savefig("./result1.jpg")
# 3, 显示图像
plt.show()
2, 完善原始折线图
语法点:
- 设置坐标轴及标题文字
xlabel()/ylabel() - 自定义坐标轴刻度
xticks()/yticks() - 设置图片网格
grid()
示例2:画出11点到12点1小时内每分钟的温度变化折线图,温度范围在18度~20度之间
![](https://i-blog.csdnimg.cn/blog_migrate/77d1ac567567fc88215fe604fc576a40.png)
# 需求:画出11点到12点1小时内每分钟的温度变化折线图,温度范围在18度~20度之间
import random
import matplotlib.pyplot as plt
minute = range(60)
# help(random.uniform)
tempreture = [random.uniform(18,20) for i in x]
# 1,创建画布
plt.figure(figsize=(20,8))
# 2,绘制图像
plt.plot(minute,tempreture)
# 添加图像描述信息
# (1)坐标轴文字及标题
plt.xlabel("时间",fontsize=20)
plt.ylabel("温度",fontsize=20)
plt.title("温度随分钟时间变化折线图",fontsize=25)
# (2)坐标轴刻度
x_tick_label = ["11点{}分".format(i) for i in minute]
plt.xticks(x[::5],x_tick_label[::5],rotation=60)
y_tick_label=range(30)
plt.yticks(y_tick_label[::5])
# (3)网格线
plt.grid(linestyle="-",alpha=0.7)
# 3,显示图像
plt.show()
3, 一个坐标系绘制两根折线
语法点:
- 图例: legend(loc="位置")
- 多根折线显示在一个图像: 多条plot(,,label="折线标签")
示例3:画出11点到12点1小时内每分钟的温度变化折线图,北京温度范围在17度~20度之间, 深圳在25度~29度之间
![](https://i-blog.csdnimg.cn/blog_migrate/4279ef77108a5302dd61c331876615cb.png)
# 需求:画出11点到12点1小时内每分钟的温度变化折线图,北京温度范围在17度~20度之间, 深圳在25度~29度之间
import matplotlib.pyplot as plt
import random
#0, 准备数据
minute = range(60)
y_beijing = [random.uniform(17,20) for i in minute]
y_shenzhen = [random.uniform(25,29) for i in minute]
#1, 创建画布
plt.figure(figsize=(20,8))
#2, 绘制图像
plt.plot(x,y_beijing,label="北京地区")
plt.plot(x,y_shenzhen,label="深圳地区")
#3, 设置图像
# (1) 设置轴标题,总标题
plt.xlabel('时间',fontsize=20)
plt.ylabel('温度',fontsize=20)
plt.title("温度变化折线图",fontsize=25)
# (2) 设置刻度,刻度标签
x_tick_label = ['11点{}分'.format(i) for i in minute]
y_tick = range(40)
plt.xticks(x[::5],x_tick_label[::5])
plt.yticks(y_tick[::5])
# (3) 设置网格线
plt.grid(linestyle='--',alpha=0.7)
# (4) 设置图例
plt.legend(loc="upper right")
#4, 显示图像
plt.show()
4, 多个坐标系绘图
语法点:
- plt.subplots(nrows=坐标系行个数,ncols=列个数,figsize=(大小))
示例4: 如果我们想要将北京和深圳的天气图显示在同一个图的不同坐标系当中
![](https://i-blog.csdnimg.cn/blog_migrate/139e07abba5fd30b9067a41eca23421e.png)
# 如果我们想要将北京和深圳的天气图显示在同一个图的不同坐标系当中
import matplotlib.pyplot as plt
import random
#0, 准备数据
minute = range(60)
y_beijing = [random.uniform(17,20) for i in minute]
y_shenzhen = [random.uniform(25,29) for i in minute]
#1, 创建画布
# plt.figure(figsize=(20,8))
fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,8))
#2, 绘制图像
# plt.plot(x,y_beijing,label="北京地区")
# plt.plot(x,y_shenzhen,label="深圳地区")
ax[0].plot(minute,y_beijing,label='北京地区')
ax[1].plot(minute,y_shenzhen,label='深圳地区',color='r')
#3, 设置图像
# (1) 设置轴标题,总标题描述信息
# plt.xlabel('时间',fontsize=20)
# plt.ylabel('温度',fontsize=20)
# plt.title("温度变化折线图",fontsize=25)
ax[0].set_xlabel('时间',fontsize=20)
ax[0].set_ylabel('温度',fontsize=20)
ax[0].set_title("温度变化折线图",fontsize=25)
ax[1].set_xlabel('时间',fontsize=20)
ax[1].set_ylabel('温度',fontsize=20)
ax[1].set_title("温度变化折线图",fontsize=25)
# (2) 设置刻度,刻度标签
x_tick_label = ['11点{}分'.format(i) for i in minute]
y_tick = range(40)
# plt.xticks(x[::5],x_tick_label[::5])
# plt.yticks(y_tick[::5])
ax[0].set_xticks(x[::5])
ax[0].set_xticklabels(x_tick_label[::5],rotation=45)
ax[0].set_yticks(y_tick[::5])
ax[1].set_xticks(x[::5])
ax[1].set_xticklabels(x_tick_label[::5],rotation=45)
ax[1].set_yticks(y_tick[::5])
# (3) 设置网格线
# plt.grid(linestyle='--',alpha=0.7)
ax[0].grid(linestyle='--',alpha=0.7)
ax[1].grid(linestyle='--',alpha=0.7)
# (4) 设置图例
# plt.legend(loc="upper right")
ax[0].legend(loc="upper right")
ax[1].legend(loc="upper right")
#4, 显示图像
plt.show()
5, 绘制函数图像
语法点:
* 这里使用了numpy包来生成数据, 以及使用了numpy的sin()函数,了解matplotlib的绘图即可, 下一节还会详细介绍numpy包的使用
![](https://i-blog.csdnimg.cn/blog_migrate/cfa85b3fb5498c70e6d351f86ecc55f3.png)
# 绘制函数图像
import numpy as np
import matplotlib.pyplot as plt
#0, 准备数据与函数
# x = range(50)# 点较少
# x = np.linspace(0,50,50) #绘制函数图像的时候要取足够多的点,才能看到光滑的曲线
x = np.linspace(0,50,1000)
y = np.sin(x)
#1, 创建画板
plt.figure(figsize=(20,8))
#2, 画图
plt.plot(x,y)
#3, 显示图像
plt.show()
6, 总结及问题解决
0, 输出matplotlib配置文件 "matplotlibrc" 位置, 下面步骤将会用到
import matplotlib
print(matplotlib.matplotlib_fname())
![](https://i-blog.csdnimg.cn/blog_migrate/0b8d5478e37932fef71bcc3c25954e88.png)
1, 中文乱码问题解决
将微软雅黑等字体文件导入到matplotlibrc所在文件夹->>fonts文件夹-->ttf文件夹中
步骤1, 在matplotlibrc文件中查找"font.family"
步骤2, 将文件中的#font.family: sans-serif去掉注释(#),并增加font.family: Microsoft YaHei。
2, 负号不显示问题解决
步骤1, 在matplotlibrc文件中查找"axes.unicode_minus"。
步骤2, 将文件中的#axes.unicode_minus:True 去掉注释符号(#),并将True改为False。
3, 保存配置, 关闭编辑器, 重新启动;
如果按照以上步骤还是无法正常显示中文字体的话,需要到c盘安装盘里找到matplotlib的缓冲目录,将整个目录进行删除。
然后再重启编辑器。就可以最终解决了