作者:朱小五

来自:凹凸数据(ID:alltodata)

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

相信大家都用过它来数据可视化,之前我还分享过25个常用Matplotlib图的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 字体相关

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

用python画画的原理_matplotlib绘图的核心原理讲解相关推荐

  1. matplotlib绘图的核心原理讲解(超详细)

    作者:Huang supreme 来源:https://blog.csdn.net/weixin_41261833/article/details/104299701 1.核心原理讲解 使用matpl ...

  2. python画画加粗_Matplotlib'粗体'字体 - python

    跟随this example: import numpy as np import matplotlib.pyplot as plt fig = plt.figure() for i, label i ...

  3. Python数据可视化之matplotlib绘图教程

    目录 一.快速绘图 1. 折线图 2. 柱状图 3. 饼状图 4. 散点图 5. 图片保存 二.基本设置 1. 图片 2. 坐标轴 3. 刻度 4. 边距 5. 图例 6. 网格 7. 标题 8. 文 ...

  4. Spark源码阅读02-Spark核心原理之调度算法

    Spark核心原理之调度算法 Spark核心原理之调度算法 应用程序之间 作业及调度阶段之间 1.创建调度池 2.调度池加入调度内容 3.提供已排序的任务集管理器 任务之间 1.数据本地性 2.延迟执 ...

  5. 【Java从0到架构师】git 核心原理和分支管理

    git 核心原理和分支管理 核心原理 Git 数据存储结构 git add 流程 - 把数据添加到暂存区 git commit 流程 - 把数据提交到版本库 HEAD 关联关系处理 分支管理 常用命令 ...

  6. 用python画画的原理_python来画画第二弹!

    下载W3Cschool手机App,0基础随时随地学编程导语 分享一波最近Get的一种python画画的方法. 让我们愉快地开始吧! 相关文件 密码: 9nei 开发工具 Python版本:3.6.4 ...

  7. python绘图库_利用python中的绘图库绘图的方法介绍

    matplotlib是Python最著名的绘图库,本文给大家分享了利用matplotlib+numpy绘制多种绘图的方法实例,其中包括填充图.散点图(scatter plots).. 条形图(bar ...

  8. python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例

    python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例 目录 机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例

  9. 2021-04-28 Python可视化图表生成-Matplotlib绘图

    Python可视化图表生成-Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib 安装 pip ins ...

最新文章

  1. AI“生死”落地:谁有资格入选AI Top 30+案例?
  2. 学编程又一火爆网站:哔哩哔哩
  3. 神策数据受邀参加全国 APP 个人信息保护监管会
  4. 移动平台WEB前端开发技巧汇总
  5. 【完结】史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(四)
  6. 助力共享经济,芝麻信用背后的技术
  7. 整合Flex和Java(上)
  8. java继承实现不用每个类都写toString方法
  9. 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
  10. imageJ 如何下载plugin_如何给微服务架构的项目做验收测试?
  11. 电脑telnet工具如何开启
  12. 当心真爱掉入“伪爱”漩涡
  13. Opencv学习笔记 高动态范围 (HDR) 成像
  14. 计算机课睡觉检讨书,上课睡觉检讨书范文三篇
  15. Java 内存分区之什么是 CCS区 Compressed Class Space 类压缩空间
  16. JS gkb转utf8(fetch gbk网页是乱码)
  17. linux web 网站搭建
  18. linux ATT汇编 输出hello world
  19. VS2019 MFC ODBC 操作SQL SERVER 数据库
  20. Python spider (二) Requests Lxml bs4

热门文章

  1. 幸福 兴趣 工作 心态
  2. 关于AD转换设计经验总结82条
  3. 西安电子科技大学计算机学院 段毅,计算机网络与信息安全国家级实验教学示范中心举办“金山云AIoT教学模型培训交流活动”...
  4. 什么是用户增长? (超详细)
  5. oa办公系统和网络安全相关问题分析
  6. python贴吧签到神器永久雷霆之怒_雷霆之怒神器脚本辅助 雷霆之怒幻神搭配攻略分享...
  7. Parameter-Efficient Conformers via Sharing Sparsely-Gated Experts for End-to-End Speech Recognition
  8. Stunnel 编译及使用
  9. MapGIS67个性化设置快捷键
  10. 精益生产的亮点在哪?