- 访问作者github: https://github.com/NefelibataBIGR/Machine_Learning_Notes ,获取笔记代码
- 具体笔记代码见 Python>matplotlib 文件中的 ==matplotlib.ipynb== 文件
一、基本介绍与操作
1. What?
专门用于开发二维图表的工具(包括三维)
以渐进、交互式方式实现数据可视化
matplotlib:
- mat:Matrix 矩阵,二维图表
- plot:Plot 画图
- lib:Library 库
- 模仿 MATLAB
一般画图的结构
matplotlib.pyplot:包含画图函数,作用于当前图像的当前坐标系
2. Why?
- 数据可视化:
- 更直观呈现
- 更客观、更有说服力
- 方便理解数据,选择合适的数据分析处理方法
3. 基本操作
- 三步走:
- 创建画布:plt.figure()
- 绘制图像:plt.plot( )
- 展示图像:plt.show()
如:
import matplotlib.pyplot as plt # 导入Matplotlib库
%matplotlib inline
# ↑用于在 Jupyter Notebook 中内嵌显示 Matplotlib 绘制的图表。使用这个命令后,可以省略 plt.show() 这一步,直接在 Notebook 中显示图像。
plt.figure() # 创建画布
plt.plot([1, 0, 9], [4, 5, 6]) # 绘制图像
plt.show() # 展示图像,用了matplotlib inline命令后可以省略
输出:
↑最基础的图(描点连线图)
4. 三层结构
- 容器层、辅助显示层、图像层
(1)容器层
- 画板层(Canvas)
- 画布层(Figure):plt.figure( )
- 绘图区/坐标系(Axes):plt.subplots( ),可以一个可以多个,容纳辅助显示层和图像层
↑ 4个绘图区
(2)辅助显示层
- 在绘图区上画
- 添加图例、标题、刻度、网格等辅助显示
(3)图像层
- 在绘图区上画
- 添加不同的颜色和风格
5. 常见图像种类
- 折线图(plot)
- 展示某指标随时间变化情况
- 画各种数学函数图像
- 散点图(scatter)
- 展示数据点
- 观察关系、规律
- 柱状图(bar)
- 统计离散类别的数据数量
- 直方图(hist)
- 统计连续数据的分布状况
- 饼图(pie)
- 统计占比(一般不超过9个)
二、基础绘图功能
1. 绘图细节
- plt.figure(figsize=(15, 8), dpi=80)
- figsize:图像大小
- dpi(dot per inch):图像清晰度
- 保存图像:
- plt.savefig(路径/名字)
- 注意要放在plt.show()前面,因为show会释放图像资源
- 修改刻度:
- plt.xticks(要修改的刻度 , 新刻度)
- plt.yticks(要修改的刻度 , 新刻度)
- 绘制网格:
- plt.grid(linestyle=”–”, alpha=0.5)
- 添加坐标轴名称和标题
- plt.xlabel(“xxx”)
- plt.ylabel(“xxx”)
- plt.title(“xxx”)
- 显示图例:
- plot( )里面设置label
- plt.legend()
如:
x = range(60)
y_city_1 = [random.uniform(15, 18) for i in x] # 随机生成指定的数据,random.uniform 均匀分布
y_city_2 = [random.uniform(13, 16) for i in x]
plt.figure(figsize=(10, 4), dpi=80)
plt.plot(x, y_city_1, color="r", linestyle="-.", label="城市1")
plt.plot(x, y_city_2, color="b", label="城市2")
# 显示图例
plt.legend(loc=1) # loc图例位置,默认0/1右上角
# 准备刻度:
x_label = ["11点{}分".format(i) for i in x]
# 修改x、y轴刻度
plt.xticks(x[::5], x_label[::5]) # 步长为5,注意x与x_label步长对应
plt.yticks(range(10, 21, 2)) # 注意range左闭右开区间
# 添加网格
plt.grid(linestyle="--", alpha=0.5) # linestyle线条风格,alpha透明度
# 添加坐标轴名称和标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("两城市11点到12点每分钟的温度变化状况")
plt.show()
输出:
- 中文显示问题
- Windows:(问 ai)
- 执行代码:(黑体)
- Windows:(问 ai)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
Mac、Linux:问 ai
- plt.plot( ):
- 一些参数:
- 其他参数自己查 api
- 一些参数:
2. 多个绘图区
- 面向对象的画图效果
- plt.subplots(nrows= , ncols= , ……)
- 注意是subplots,有s!
- 参数:
- nrows=:几行
- ncols=:几列
- return:figure(图像)、axes(绘图区)
- 使用:
- axes[n]:第(n+1)个绘图区
- axes[n].set_xticks/set_yticks( )
- axes[n].set_xlabel/set_ylabel( )
三、绘制各种图像
1. 折线图
- plt.plot(x , y) 就是折线图(描点连线)
- 三步走 -> 修改细节 -> 完善(增加辅助显示层)
- 代码见文件
2. 散点图
- plt.scatter(x , y)
- 代码见文件
3. 柱状图
- plt.bar(x , y , width= )
- width=:柱子宽度
- 代码见文件
4. 直方图
- 相关概念:
- 组距
- 组数(可以用组距、数据最大/小值计算)
- plt.hist(x , bins= , density= )
- bins=:组数
- density=:默认False纵轴为频数,True纵轴为频率
- 代码见文件
5. 饼图
- plt.pie(x , labels= , autopct= )
- labels=:类别名称
- autopct=:占比数值显示,一般指定%1.2f%%
- 代码见文件