• matplotlib绘图的核心原理讲解


    matplotlib绘图的核心原理讲解

    一、总结

    一句话总结:

    一个figure(画布)有多个axes(坐标系),也就是子图,一个axes(坐标系)有多个axis(坐标轴),比如x轴y轴

    1、matplotlib获取axes?

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

    2、matplotlib创建figure?

    figure = plt.figure()

    3、隐式创建figure对象?

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

    二、matplotlib绘图的核心原理讲解

    转自或参考:matplotlib绘图的核心原理讲解
    https://baijiahao.baidu.com/s?id=1659039367066798557&wfr=spider&for=pc

    matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。

    相信大家都用过它来数据可视化。

    可是你了解过它绘图的核心原理吗?

     

    核心原理讲解

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

    以“美院学生张三写生画画”为例,来说明这三者之间的关系。

    张三的画板

    首先,张三想要画画,是不是需要在画板上面准备一张画布。对比到matplotlib中,就相当于初始化了一张figure(画布),我们画的任何图形,都是在这张figure(画布)上操作的。

    接着,张三需要给figure(画布)分配不同的区域,指定哪一块儿究竟该画什么。对比到matplotlib中,就是需要指定axes(坐标系),每一个axes(坐标系)相当于一张画布上的一块区域。一张画布上,可以分配不同区域,也就是说,一张画布,可以指定多个axes(坐标系)。

    最后,张三就是在分配好的不同区域上进行图形绘制了,在一张画布上,画的最多的应该就是2D图,也可以画3D图,如图所示,张三在区域一画了一个小狗,在区域二画了一个小猫,在区域三画了一个光头强。对比到matplotlib中,我们在axes1中画了一个条形图,在axes2中画了一个饼图,在axes3中画了一个折线图。当是2D图时,都会有一个X轴和一个Y轴;当是3D图时,都会有一个X轴、一个Y轴和一个Z轴,这个轴就是我们所说的“坐标轴axis”。

    matplotlib绘图

    通过上述分析,总结如下:一个figure(画布)上,可以有多个区域axes(坐标系),我们在每个坐标系上绘图,也就是说每个axes(坐标系)中,都有一个axis(坐标轴)。

    特别注意:在matplotlib中,figure画布和axes坐标轴并不能显示的看见,我们能够看到的就是一个axis坐标轴的各种图形。

    matplotlib库的安装与导入

    1)安装

    pip install matplotlib

    2)导入相关库

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

    import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt# 排除警告信息import warningswarnings.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

    结果如下:

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

    1)绘制一个最简单的折线图

    import matplotlib as mplimport matplotlib.pyplot as pltx = [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,1)

    如图所示:

    举例说明:

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

    结果如下:

    完整的绘图步骤

    ① 导库

    import matplotlib as mplimport matplotlib.pyplot as plt

    ② 创建figure画布对象

    如果绘制一个简单的小图形,我们可以不设置figure对象,使用默认创建的figure对象,当然我们也可以显示创建figure对象。如果一张figure画布上,需要绘制多个图形。那么就必须显示的创建figure对象,然后得到每个位置上的axes对象,进行对应位置上的图形绘制。

    ③ 根据figure对象进行布局设置

    1*11*22*12*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中进行绘图,可以不用加这句代码,而是自动显示。

    绘图技巧(细节设置)

    通过对matplotlib绘图的原理,有所了解之后,我们需要学习的就是常见的matplotlib绘图技巧。

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

    常见的绘图技巧如上所示,这些绘图技巧都能够很好的帮助我们画出更美观、更直观的图形。

     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    2018CCPC网络赛A(优先队列,思维)
    2017BAPC初赛A(思维,无序图,向量)
    2018杭电多校第三场1007(凸包,极角排序)
    2018杭电多校第二场1003(DFS,欧拉回路)
    2017乌鲁木齐区域赛K(容斥原理【求指定区间内与n互素的数的个数】)
    删除特定字符
    Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
    The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.问题解决
    生命周期图
    Mac 如何恢复出厂设置
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13407983.html
Copyright © 2020-2023  润新知