机器学习(3)- Matplotlib
程序员文章站
2022-03-20 13:09:56
...
Matplotlib
一. Matplotlib之HelloWorld
-
什么是Matplotlib
专门绘制2D图表的软件 -
为什么要学习Matplotlib
做数据可视化, Matplotlib是一个比较方便的工具 -
实现一个简单的Matplotlib画图
-
导入: import matplotlib.pyplot as plt
- 准备数据
- 创建画布
- 绘图
- 展示
-
Matplotlib三层结构
-
容器层
画板 -> 画布 -> 坐标系
-
辅助层
- 刻度, 坐标轴的标题, 标题, 网格, 图例
-
图像层
- 折线, 柱状图, 散点图, 饼状图, 直方图 …
-
二. 折线图(plot)与基础绘图功能
1. 折线图绘制与保存图片
- 绘图三步:
- 创建画布
- 绘图
- 展示
- 保存图片
- API: plt.savefig(path)
- 注意: 必须在show()前调用
- 原因: show()把画布清空了.
2. 完善原始折线图1(辅助显示层)
-
2.1 添加自定义x,y刻度
-
添加x轴刻度
- api: plt.xticks(x, 刻度文本列表)
-
添加y轴刻度
- api: plt.yticks(y, 刻度文本列表)
-
注意:
- 第一个参数必须是一个标量的列表
- 刻度文本列表必须和标量的列表一一对应
import random # 准备数据 x = range(60) y_gz = [random.randint(25,35) for i in x] # 创建画布 plt.figure(figsize=(20, 8), dpi=80) # 绘图 plt.plot(x, y_gz) # 添加刻度 # 准备刻度的数据 x_ticks = ['11点{}分'.format(i) for i in x] y_ticks = range(40) # 设置刻度 plt.xticks(x[::5], x_ticks[::5], fontsize=20) plt.yticks(y_ticks[::5], fontsize=20) # 展示 plt.show()
-
-
2.2 中文显示问题解决[了解]
1. 下载黑体 2. 拷贝字体文件
# ~/.virtualenvs/ai/local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf # 字体文件 # 打印matplotlib配置文件的位置 import matplotlib print(matplotlib.matplotlib_fname())
-
编辑配置文件
#cd ~/.virtualenvs/ai/local/lib/python3.5/site-packages/matplotlib/mpl-data #vim matplotlibrc # 添加下面内容到配置文件中 font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False
-
删除缓存文件
rm -r ~/.cache/matplotlib/*
-
重新运行 jupyter notebook
-
-
2.3 添加网格显示
- API: plt.grid(linestyle, alpha, color)
- 参数:
- linestyle; 线的样式, - 实线, --虚线
- alpha: 透明度
- color: 颜色 r,g,b
-
2.4 添加描述信息
- 添加x轴描述: plt.xlabel(‘名称’, fontsize)
- 添加y轴描述: plt.ylabel(‘名称’, fontsize)
- 添加标题: plt.title(‘标题’, fontsize)
3. 完善原始折线图2(图像层)
-
3.1 多次plot
- 如何绘制多折线图?
- 调用多次 plt.plot()
- plt.plot(x,y,linestyle,color,label)
- linestyle; 线的样式, - 实线, – 虚线
- color: r,g,b,y,c,m,k(黑色)
- label: 给线打标签(起名字)
- 如何绘制多折线图?
-
3.2 图例
- plt.legend(loc=‘best’, fontsize=20)
- 注意: 线要有label.
-
- 多个坐标系显示-plt.subplots(面向对象的画图方法)
- API: plt.subplots(nrows=1, ncols=1, figsize=(20, 10), dpi=80)
- 参数:
- nrows: 有几行坐标系
- ncols: 有几列坐标系
- figsize: 画布大小
- dpi: 清晰度
- 返回:
- 画布, 坐标系的元组(列表)
-
坐标系功能与plt相同, 有些方法不同
- set_xticks()
- set_yticks()
- set_xticklabels()
- set_title()
- set_xlabel()
- set_ylabel()
# 准备数据
x = range(60)
y_gz = [random.randint(25,35) for i in x]
y_bj = [random.randint(10,20) for i in x]
# 获取两个坐标系
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 绘制折线图
axes[0].plot(x, y_gz, linestyle='--', color='r', label='广州')
axes[1].plot(x, y_bj, color='b', label='北京')
# 添加图例
axes[0].legend()
axes[1].legend()
# 设置刻度
xticks = ['11点{}分'.format(i) for i in x]
yticks = range(40)
axes[0].set_xticks(x[::10])
axes[0].set_xticklabels(xticks[::10])
axes[0].set_yticks(yticks[::5])
axes[1].set_xticks(x[::10])
axes[1].set_xticklabels(xticks[::10])
axes[1].set_yticks(yticks[::5])
# 设置坐标轴描述(名称)
axes[0].set_xlabel('时间')
axes[0].set_ylabel('文档')
axes[0].set_title('广州11点到12点的温度变化情况')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('文档')
axes[1].set_title('北京11点到12点的温度变化情况')
plt.show()
三. 折线图的应用场景
- 绘制数据随时间变化的情况
- 绘制函数图形.
import numpy as np
# 准备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
# 创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 绘图
plt.plot(x, y)
# 展示
plt.show()
四. 常见图像绘制
-
API与含义:
- 折线图: 用于描述数据的变化情况
- API: plt.plot(x, y)
- 散点图: 1. 查看两个变量的相关性 2. 查看数据的分布情况
- API: plt.scatter(x, y)
- 柱状图: 对比,时间序列.
- API: plt.bar(x, height, width, color)
- 直方图: 用于统计一组连续数据的分布情况
- API: plt.hist(x, bins)
- 饼状图: 统计每一部分的占比情况
- API: plt.pie(x, labels, autopct, colors)
- 折线图: 用于描述数据的变化情况
-
案例
-
散点图绘制
import matplotlib.pyplot as plt # 0.准备数据 x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.35] y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34, 140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 , 30.74, 400.02, 205.35, 330.64, 283.45]
-
# 创建画布
plt.figure(figsize=(20,8), dpi=80)
# 绘制散点图
plt.scatter(x, y)
# 展示
plt.show()
- 柱状图
```python
# 准备数据
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
height = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 绘制柱状图
x = range(len(movie_names))
plt.bar(x, height, width=0.5, color=['r','g','b','c','m','k','y'])
# 设置x轴刻度
plt.xticks(x, movie_names)
# 展示
plt.show()
-
饼状图
# 准备数据 x = [10, 20, 30, 40, 60] # 创建画布 plt.figure(figsize=(4, 4), dpi=100) # 绘制饼状图 plt.pie(x, labels=list('abcde'), autopct='%.2f%%', colors=['r','g','y','c','m']) # 展示 plt.show()
上一篇: 布局技巧:使用ViewStub
下一篇: 使用GDAL读取影像