机器学习7——Matplotlib


一、基本介绍与操作

1. What?

  • 专门用于开发二维图表的工具(包括三维)

  • 以渐进、交互式方式实现数据可视化

  • matplotlib:

    • mat:Matrix 矩阵,二维图表
    • plot:Plot 画图
    • lib:Library 库
    • 模仿 MATLAB
      image.png
      一般画图的结构
  • 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命令后可以省略

输出:
image.png
↑最基础的图(描点连线图)

4. 三层结构

  • 容器层、辅助显示层、图像层

(1)容器层

  1. 画板层(Canvas)
  2. 画布层(Figure):plt.figure( )
  3. 绘图区/坐标系(Axes):plt.subplots( ),可以一个可以多个,容纳辅助显示层和图像层
    image.png
    ↑ 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”)
  • 显示图例:
    1. plot( )里面设置label
    2. 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()

输出:
image.png

  • 中文显示问题
    • Windows:(问 ai)
      • 执行代码:(黑体)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题

Mac、Linux:问 ai

  • plt.plot( ):
    • 一些参数:
      image.png
    • 其他参数自己查 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%%
  • 代码见文件

文章作者: Nefelibata BIGR
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Nefelibata BIGR !
 上一篇
机器学习8——Seaborn 机器学习8——Seaborn
机器学习笔记8:Seaborn部分,学习内容为b站视频。
2025-02-28
下一篇 
《文明之旅》1021-1030年 《文明之旅》1021-1030年
这是一档聚焦中国历史,计划持续二十年制作播出的视频节目,也是一个超长期的文化工程。它将传承《资治通鉴》的中国编年史传统,从公元1000年开讲,一直讲到1912年,每一期节目聚焦于中国历史上的一年。上下913期节目,前后20年的时光,将陪伴和影响不止一代人。
2025-02-14
  目录