微信扫一扫打赏支持

matplotlib库疑难问题---3、matplotlib绘图核心原理

matplotlib库疑难问题---3、matplotlib绘图核心原理

一、总结

一句话总结:

(1)使用matplotlib绘图的原理,主要就是理解figure(画布)、axes(坐标系)、axis(坐标轴)三者之间的关系。
(2)在matplotlib画图过程中,figure(画布)和axes(坐标系)我们是看不到的。
(3)如果不显示创建figure(画布),那么figure(画布)会被隐式创建,并且同时也会创建一个axes(坐标系)对象,那么这种情况下,只能绘制一个图像。
(4)如果想绘制多个图像,可以显示创建figure(画布)对象,这样我们可以用画布对象来创建多个axes(坐标系)对象,从而绘制多个图。
import numpy as np
import matplotlib.pyplot as plt

# 显示创建figure对象,方便用figure对象创建多个axes对象
figure = plt.figure()

# (2,1,1)中前面的2和1表示2行1列,所以是两个图,最后的那个1表示这两个图中的第1个
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
plt.show()

 

1、matplotlib创建画布两种方式?

a、隐式创建:当第一次执行plt.plot()这句绘图代码时,系统会去判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure之上,自动创建一个axes坐标系(注意:默认创建一个figure对象,一个axes坐标系)。
b、显示创建:如果想绘制多个图像,可以显示创建figure(画布)对象,这样我们可以用画布对象来创建多个axes(坐标系)对象,从而绘制多个图:figure = plt.figure()

 

2、matplotlib 显示创建 画布代码?

figure = plt.figure() # 显示创建figure对象,方便用figure对象创建多个axes对象

 

 

二、matplotlib绘图核心原理

博客对应课程视频位置:3、matplotlib绘图核心原理-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/373

 

1、核心原理讲解


使用matplotlib绘图的原理,主要就是理解figure(画布)、axes(坐标系)、axis(坐标轴)三者之间的关系。


张三的画板

 

 


matplotlib绘图

 

 

2、matplotlib库的安装与导入

1)安装
pip install matplotlib
2)导入相关库

  现在你不需要关注下面代码具体是什么意思,有一个主观印象即可。我将会在以后的文章中,给大家一一介绍你不懂的哪些参数。

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

# 排除警告信息
import warnings
warnings.filterwarnings("ignore")

# 打印版本信息
display(np.__version__)
display(pd.__version__)
display(mpl.__version__)

# matplotlib画图常见参数设置
mpl.rcParams["font.family"] = "SimHei" # 设置字体
mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

# 嵌入式显示图形
%matplotlib inline  

结果如下:

 

 

3、创建figure(画布)的两种方式

1)绘制一个最简单的折线图
import matplotlib as mpl
import matplotlib.pyplot as plt

x = [1,3,5,7]
y = [4,9,6,8]
plt.plot(x,y)
plt.show()

结果如下:

 

 


结果分析:
  在前面的叙述中,我们已经说过,想要使用matplotlib绘图,必须先要创建一个figure(画布)对象,然后还要有axes(坐标系)。但是观察上述代码,我们并没有创建figure对象,那么怎么又可以画图呢?
  对于上述疑问,接下来我们就要讲述创建figure(画布)的两种方式。

  

2)创建figure(画布)的两种方式
  • 隐式创建
  • 显示创建
① 隐式创建figure对象

  当第一次执行plt.xxx()这句绘图代码时,系统会去判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure之上,自动创建一个axes坐标系(注意:默认创建一个figure对象,一个axes坐标系)。
  也就是说,如果我们不设置figure对象,那么一个figure对象上,只能有一个axes坐标系,即我们只能绘制一个图形。
  

② 隐式创建figure对象存在的问题

  优势:如果只是绘制一个小图形,那么直接使用plt.xxx()的方式,会自动帮我们创建一个figure对象和一个axes坐标系,这个图形最终就是绘制在这个axes坐标系之上的。
  劣势:如果我们想要在一个figure对象上,绘制多个图形,那么我们就必须拿到每个axes对象,然后调用每个位置上的axes对象,就可以在每个对应位置的坐标系上,进行绘图,如下图所示。注意:如果figure对象是被默认创建的,那么我们根本拿不到axes对象。因此,需要我们显示创建figure对象。

 

 

③ 显示创建figure对象
# 手动创建一个figure对象
figure = plt.figure()
# 获取每个位置的axes对象
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

(2,1,1)中前面的2和1表示2行1列,所以是两个图,最后的那个1表示这两个图中的第1个

 

如图所示:

 

 


举例说明:

figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
figure.show()

结果如下:

 

 

4、完整的绘图步骤

① 导库
import matplotlib as mpl
import matplotlib.pyplot as plt
② 创建figure画布对象
    如果绘制一个简单的小图形,我们可以不设置figure对象,使用默认创建的figure对象,
当然我们也可以显示创建figure对象。
    如果一张figure画布上,需要绘制多个图形。那么就必须显示的创建figure对象,然后
得到每个位置上的axes对象,进行对应位置上的图形绘制。
③ 根据figure对象进行布局设置
1*1
1*2
2*1
2*2
...
④ 获取对应位置的axes坐标系对象
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,1)
⑤ 调用axes对象,进行对应位置的图形绘制
    这一步,是我们传入数据,进行绘图的一步。对于图形的一些细节设置,都可以在这一步进行。
⑥ 显示图形
    plt.show()或figure.show()
    如果在pycharm中绘图的话,必须要加这句代码,才能显示。如果在notebook中进行绘图,
可以不用加这句代码,而是自动显示。

5、绘图技巧(细节设置)

* figure 画布
* axes 坐标系,一个画布上可以有多个坐标系
* axis 坐标轴,一个坐标系中可以有多个坐标轴,一般都是二维平面坐标系,或者三维立体坐标系
* title 标题
* legend 图例
* grid 背景网格
* tick 刻度
* axis label 坐标轴名称
* tick label 刻度名称
    * major tick label 主刻度标签
    * minor tick label 副刻度标签
* line 线
* style 线条样式
* marker 点标记
* font 字体相关

  通过对matplotlib绘图的原理,有所了解之后,继续深入学习matplotlib就特别轻松了

 
转自或参考:matplotlib绘图的核心原理讲解(超详细)
https://blog.csdn.net/weixin_41261833/article/details/104299701
 

三、代码

import numpy as np
import matplotlib.pyplot as plt

显示创建figure对象

In [2]:
# 显示创建figure对象,方便用figure对象创建多个axes对象
figure = plt.figure()

# (2,1,1)中前面的2和1表示2行1列,所以是两个图,最后的那个1表示这两个图中的第1个
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)

axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
plt.show()
In [3]:
# 显示创建figure对象,方便用figure对象创建多个axes对象
figure = plt.figure()

# 有六个坐标系,所以画了六个图
axes1 = figure.add_subplot(2,3,1)
axes2 = figure.add_subplot(2,3,2)
axes3 = figure.add_subplot(2,3,3)
axes4 = figure.add_subplot(2,3,4)
axes5 = figure.add_subplot(2,3,5)
axes6 = figure.add_subplot(2,3,6)

axes1.plot([1,3,5,7],[4,9,6,8])
axes2.plot([1,2,4,5],[8,4,6,2])
axes3.plot([1,3,5,7],[4,9,6,8])
axes4.plot([1,2,4,5],[8,4,6,2])
axes5.plot([1,3,5,7],[4,9,6,8])
axes6.plot([1,2,4,5],[8,4,6,2])
plt.show()

有六个坐标系,所以画了六个图

In [ ]:
 

 

 

本系列博客对应课程位置:
1、解决中文乱码问题-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/371
2、将曲线平滑-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/372
3、matplotlib绘图核心原理-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/373
4、画动态图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/374
5、保存动态图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/375
6、显示图片-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/376

7、去掉刻度和边框-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/383

8、几个点画曲线-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/384

9、画箭头(综合实例)-1-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/391

9、画箭头(综合实例)-2-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/392

10、画直方图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/393

11、画动态直方图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/394

 

 
 
 
 
posted @ 2020-10-22 01:12  范仁义  阅读(224)  评论(0编辑  收藏  举报