用python画画的原理_matplotlib绘图的核心原理讲解
作者:朱小五
来自:凹凸数据(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绘图的核心原理讲解相关推荐
- matplotlib绘图的核心原理讲解(超详细)
作者:Huang supreme 来源:https://blog.csdn.net/weixin_41261833/article/details/104299701 1.核心原理讲解 使用matpl ...
- python画画加粗_Matplotlib'粗体'字体 - python
跟随this example: import numpy as np import matplotlib.pyplot as plt fig = plt.figure() for i, label i ...
- Python数据可视化之matplotlib绘图教程
目录 一.快速绘图 1. 折线图 2. 柱状图 3. 饼状图 4. 散点图 5. 图片保存 二.基本设置 1. 图片 2. 坐标轴 3. 刻度 4. 边距 5. 图例 6. 网格 7. 标题 8. 文 ...
- Spark源码阅读02-Spark核心原理之调度算法
Spark核心原理之调度算法 Spark核心原理之调度算法 应用程序之间 作业及调度阶段之间 1.创建调度池 2.调度池加入调度内容 3.提供已排序的任务集管理器 任务之间 1.数据本地性 2.延迟执 ...
- 【Java从0到架构师】git 核心原理和分支管理
git 核心原理和分支管理 核心原理 Git 数据存储结构 git add 流程 - 把数据添加到暂存区 git commit 流程 - 把数据提交到版本库 HEAD 关联关系处理 分支管理 常用命令 ...
- 用python画画的原理_python来画画第二弹!
下载W3Cschool手机App,0基础随时随地学编程导语 分享一波最近Get的一种python画画的方法. 让我们愉快地开始吧! 相关文件 密码: 9nei 开发工具 Python版本:3.6.4 ...
- python绘图库_利用python中的绘图库绘图的方法介绍
matplotlib是Python最著名的绘图库,本文给大家分享了利用matplotlib+numpy绘制多种绘图的方法实例,其中包括填充图.散点图(scatter plots).. 条形图(bar ...
- python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例 目录 机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
- 2021-04-28 Python可视化图表生成-Matplotlib绘图
Python可视化图表生成-Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib 安装 pip ins ...
最新文章
- AI“生死”落地:谁有资格入选AI Top 30+案例?
- 学编程又一火爆网站:哔哩哔哩
- 神策数据受邀参加全国 APP 个人信息保护监管会
- 移动平台WEB前端开发技巧汇总
- 【完结】史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(四)
- 助力共享经济,芝麻信用背后的技术
- 整合Flex和Java(上)
- java继承实现不用每个类都写toString方法
- 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
- imageJ 如何下载plugin_如何给微服务架构的项目做验收测试?
- 电脑telnet工具如何开启
- 当心真爱掉入“伪爱”漩涡
- Opencv学习笔记 高动态范围 (HDR) 成像
- 计算机课睡觉检讨书,上课睡觉检讨书范文三篇
- Java 内存分区之什么是 CCS区 Compressed Class Space 类压缩空间
- JS gkb转utf8(fetch gbk网页是乱码)
- linux web 网站搭建
- linux ATT汇编 输出hello world
- VS2019 MFC ODBC 操作SQL SERVER 数据库
- Python spider (二) Requests Lxml bs4
热门文章
- 幸福 兴趣 工作 心态
- 关于AD转换设计经验总结82条
- 西安电子科技大学计算机学院 段毅,计算机网络与信息安全国家级实验教学示范中心举办“金山云AIoT教学模型培训交流活动”...
- 什么是用户增长? (超详细)
- oa办公系统和网络安全相关问题分析
- python贴吧签到神器永久雷霆之怒_雷霆之怒神器脚本辅助 雷霆之怒幻神搭配攻略分享...
- Parameter-Efficient Conformers via Sharing Sparsely-Gated Experts for End-to-End Speech Recognition
- Stunnel 编译及使用
- MapGIS67个性化设置快捷键
- 精益生产的亮点在哪?