Python的Matplotlib简易教程(速查详细版)——非常全,目录清晰,建议收藏

本文涵盖Mtplotlib画图的所有知识的和美化,源代码和数据均在github已上传,欢迎star哦:
https://github.com/w1449550206/Matplotlib.git

在这里插入图片描述

学完本文,您会收获些什么?

  • 知道Matplotlib的架构
  • 应用Matplotlib的基本功能实现图形显示
  • 应用Matplotlib实现多图显示
  • 应用Matplotlib实现不同画图种类

注意:学习这个工具要知道他是怎么使用的,要掌握的是逻辑
在这里插入图片描述

一、Matplotlib之HelloWorld

学完本节,您会收获些什么?

  • 了解什么是matplotlib
  • 为什么要学习matplotlib
  • matplotlib的三层结构介绍
  • 应用

1 什么是Matplotlib

在这里插入图片描述

  • 是专门用于开发2D图表(包括3D图表)

  • 使用起来及其简单

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

数据可视化 画图

要学会怎么使用,主要掌握的要是逻辑

学会常见图形

折线图 散点图 柱状图 直方图 饼图

2 为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

  • 能将数据进行可视化,更直观的呈现
  • 使数据更加客观、更具说服力

例如下面两个图为数字展示和图形展示:

在这里插入图片描述

3 实现一个简单的Matplotlib画图

import matplotlib.pyplot as plt

# 1.创建画布
plt.figure(figsize=(20,8), dpi=100)

# 2.绘制图像
x = [1,2,3]
y = [4,5,6]
plt.plot(x, y)

# 3.显示图像
plt.show()

在这里插入图片描述

4 认识Matplotlib图像结构(拓展,了解)

在这里插入图片描述

5 Matplotlib三层结构(拓展,了解)

5.1 容器层

容器层主要由Canvas、Figure、Axes组成。

Canvas画板(只有一个不用去管)
Figure画布(只有一个不用去管,接受一下即可)
Axes绘图区域(重点,有可能在旁边画好几个图,所以是一个二维数组)

在这里插入图片描述
Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。

Figure是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。

Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。

  • Figure:指整个图形(可以通过plt.figure()设置画布的大小和分辨率等)
  • Axes(坐标系):数据的绘图区域
  • Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签

特点为:

  • 一个figure(图像)可以包含多个axes(坐标系/绘图区),但是一个axes只能属于一个figure。
  • 一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系
    在这里插入图片描述

5.2 辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。

该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。

5.3 图像层

图像层指Axes内通过plot线形图、scatte散点图、bar柱状、histogram直方、pie饼图等函数根据数据绘制出的图像。

在这里插入图片描述

  • 总结:
    • Canvas(画板)位于最底层,用户一般接触不到
    • Figure(画布)建立在Canvas之上
    • Axes(绘图区)建立在Figure之上
    • 坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上

6 小结

  • 什么是matplotlib【了解】
    • 是专门用于开发2D(3D)图表的包
  • 绘制图像流程【掌握】
    • 1.创建画布 – plt.figure(figsize=(20,8))
    • 2.绘制图像 – plt.plot(x, y)
    • 3.显示图像 – plt.show()
  • matplotlib图像结构【了解】
    • 容器层
      • Canvas – 画板
        • 是底层实现,不需要关注
      • Figure – 画布
        • 在使用之前,每次都需要进行实例化
      • axes – 坐标系
        • 数据的绘图区域
    • 辅助显示层
      • 主要作用添加坐标轴描述,标题等内容
    • 图像层
      • 设定要画一个什么样的图像:plot,scatter…

二、折线图(plot)与基础绘图功能

学完本节,您会收获些什么?

  • 学习折线图的绘制和图形保存
  • 给图形添加辅助功能(如:标注、x,y轴名称、标题等)
  • 多次plot绘制图形
  • 多个坐标系显示图形
  • 知道折线图的应用场景
  • 应用
    • 天气的温度变化显示

1 折线图绘制与保存图片

简单绘制

#导入matplotlib
import matplotlib.pyplot as plt

#创建画布 figsize画布大小 dpi像素密度
#只绘制一个图的话不用去设置绘图区域
plt.figure(figsize=(20,8),dpi=100)

#绘制图像
plt.plot([1,2,3,4,5,6,7],[1,4,9,16,25,36,49])

#显示图像
plt.show()

在这里插入图片描述

为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用

1.1 matplotlib.pyplot模块

matplotlib.pytplot包含了一系列类似于matlab的画图函数。 它的函数作用于当前图形(figure)的当前坐标系(axes)

import matplotlib.pyplot as plt

1.2 折线图绘制与显示

绘制安徽省宣城市泾县未来一周的最低气温2020.02.29-2020.03.06

#导入工具
import matplotlib.pyplot as plt

#创建画布
plt.figure(figsize=(20,8),dpi = 100)

#绘制图像,绘制安徽省宣城市泾县未来一周的最低气温2020.02.29-2020.03.06
plt.plot([1,2,3,4,5,6,7],[9,7,6,7,4,6,8])

#显示图像
plt.show()#如果不用show的话,只是在缓存中

在这里插入图片描述
展现上海一周的天气,比如从星期一到星期日的天气温度如下

# 1.创建画布(容器层)
plt.figure(figsize=(10, 10))

# 2.绘制折线图(图像层)
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])

# 3.显示图像
plt.show()

在这里插入图片描述

可以看到这样显示效果并不好,我们可以加入更多的功能:

1.3 设置画布属性与图片保存

保存图像

#导入工具
import matplotlib.pyplot as plt

#创建画布
plt.figure(figsize=(20,8),dpi = 100)

#绘制图像,绘制安徽省宣城市泾县未来一周的最低气温2020.02.29-2020.03.06
plt.plot([1,2,3,4,5,6,7],[9,7,6,7,4,6,8])

#保存图像
plt.savefig('./安徽省宣城市泾县未来一周最低气温折线图')

#显示图像
plt.show()#如果不用show的话,只是在缓存中

如果在show后面再执行保存代码,那么就会失败!!!
因为绘制图像立马保存在内存中,直接save可以,但是用了show之后,内存就会清空,我们再去保存的话,就是空白的
因此,保存图像,必须在显示图像之前
savefig必须在show之前!!!!!!!!!!!!

在这里插入图片描述

plt.figure(figsize=(), dpi=)
    figsize:指定图的长宽
    dpi:图像的清晰度
    返回fig对象
plt.savefig(path)
# 1.创建画布,并设置画布属性
plt.figure(figsize=(20, 8), dpi=80)
# 2.保存图片到指定路径
plt.savefig("test.png")
  • 注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

2 完善原始折线图1(辅助显示层)

案例:显示温度变化状况

需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度(随机产生)

效果:
在这里插入图片描述

2.1 准备数据并画出初始折线图

# 画出温度变化图

# 0.准备x, y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 2.绘制折线图
plt.plot(x, y_shanghai)

# 3.显示图像
plt.show()

在这里插入图片描述

2.2 添加自定义x,y刻度

  • plt.xticks(x, **kwargs)

    x:要显示的刻度值

  • plt.yticks(y, **kwargs)

    y:要显示的刻度值

# 增加以下两行代码
# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)

# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

在这里插入图片描述

如果没有解决过中文问题的话,会显示这个样子:

在这里插入图片描述
加了刻度的案例

#导入工具
import matplotlib.pyplot as plt
import random

#创建画布
plt.figure(figsize=(20,8),dpi = 80)

#绘制图像,画出安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图,
#温度范围在15度~18度(随机产生)
x = range(60)
y_jingxian = [random.uniform(15,18) for i in x]#列表生成式,uniform定义范围得到一个随机数

plt.plot(x,y_jingxian)

plt.rcParams['font.family']=['SimHei']

#添加描述信息
plt.xlabel('时间',fontsize = 20)
plt.ylabel('温度',fontsize = 20)
plt.title('安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图',fontsize = 20)

# # 添加x坐标轴刻度
x_tick_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_tick_label[::5])# [::5]是每隔五个选一个,后面的也要对应上

# # 添加y坐标轴刻度
y_range = range(40)
plt.yticks(y_range[::5])#[::5]是每隔五个选一个

#保存图像
plt.savefig('./安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图.png')

#显示图像
plt.show()#如果不用show的话,只是在缓存中

在这里插入图片描述

2.3 中文显示问题解决

windows

【重要】设置支持中文,windows可以设置字体位置,但是linux’不行,所以我们要记住这个方法
plt.rcParams['font.family'] = ['SimHei']

#导入工具
import matplotlib.pyplot as plt
import random

#创建画布
plt.figure(figsize=(20,8),dpi = 80)

#绘制图像,画出安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图,
#温度范围在15度~18度(随机产生)
x = range(60)
y_jingxian = [random.uniform(15,18) for i in x]#列表生成式,uniform定义范围得到一个随机数

plt.plot(x,y_jingxian)

plt.rcParams['font.family']=['SimHei']

#添加描述信息
plt.xlabel('时间',fontsize = 20)
plt.ylabel('while度',fontsize = 20)
plt.title('安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图',fontsize = 20)

#保存图像
plt.savefig('./安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图.png')

#显示图像
plt.show()#如果不用show的话,只是在缓存中

在这里插入图片描述

非windos

下载中文字体(黑体,看准系统版本)

  • 下载 SimHei字体(或者其他的支持中文显示的字体也行)
    这个字体网上可以下载到,如果找不到可以评论or私信我

  • 安装字体

    • linux下:拷贝字体到 usr/share/fonts 下:

      sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
      
    • windows和mac下:双击安装

  • 删除~/.matplotlib中的缓存文件

    cd ~/.matplotlib
    rm -r *
    
  • 修改配置文件matplotlibrc

    vi ~/.matplotlib/matplotlibrc
    

    将文件内容修改为:

    font.family         : sans-serif
    font.sans-serif         : SimHei
    axes.unicode_minus  : False
    
    

    就ok了

2.4 添加网格显示

为了更加清楚地观察图形对应的值

plt.grid(True, linestyle='--', alpha=0.5)

在这里插入图片描述
注意线型可以选择的有

风格字符
- 实线
- - 虚线
-. 点划线
: 点虚线
’ ’ 留空、空格

加了网格显示的案例

#导入工具
import matplotlib.pyplot as plt
import random

#创建画布
plt.figure(figsize=(20,8),dpi = 80)

#绘制图像,画出安徽省宣城市泾县11点到12点1小时内每分钟的温度变化折线图,
#温度范围在15度~18度(随机产生)
x = range(
  • 56
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值