matplotlib教程——强大的python作图工具库


Posted in Python onOctober 15, 2020

matplotlib简介

如果你在大学里参加过数学建模竞赛或者是用过MATLAB的话,相比会对这一款软件中的画图功能印象深刻。MATLAB可以做出各种函数以及数值分布图像非常的好用和方便。如果你没用过呢也没关系,知道这么回事就好了。MATLAB虽然好用,但毕竟是收费软件,而且相比于MATLAB,很多人更喜欢Python的语法。

所以呢MATLAB就被惦记上了,后来有大神仿照MATLAB当中的画图工具,也在Python当中开发了一个类似的作图工具。这也就是我们今天这篇文章要讲的matplotlib,也是Python、数据分析以及机器学习领域当中使用最广泛的作图工具包,几乎没有之一。前段时间不是美国政府搞事情,导致MATLAB公司宣布对中国的几所高校禁止使用MATLAB嘛,有一些人就提出来说我们可以使用Python当中的一些开源工具代替,当然MATLAB当中还有很多其他厉害的功能,Python可能不一定能代替,但至少在作图这个领域是没问题的。

matplotlib 基本用法

matplotlib广泛流行的一个非常主要的原因就是它方便、好用,我们来看几个经典的例子就知道了,短短几行代码就可以作出质量非常高的图。

我们使用的是matplotlib这个包下的pyplot这个库,从名字上我们也看得出来它是Python库。如果你安装了Anaconda这样完整的Python包管理工具的话,那么这个包默认应该已经装好了。如果没有,可以使用pip安装一下,命令也非常简单。

pip install matplotlib

装好了包之后,我们通常的使用惯例是将它重命名成plt,所以如果你阅读一些源码以及其他大神的代码,作图的时候经常会出现plt.xxx,就是这么来的。

import matplotlib.pyplot as plt

plot当中有几种常用的作图工具,第一种是作折线图或者是曲线图的,叫做plot。第二种是作柱状图的叫做hist,第三种是作散点图的,叫做scatter,第四种是作饼状图的。除此之外还可以作一些三维的图像,但是一般日常当中使用得比较少,大部分是用来炫技的。

曲线图

plot其实是用来作曲线图的,采用的方法是描点呈现,它会将我们的数据点串联起来,成为一条光滑的曲线。当然,作折线、直线也都是可以的,最后成图的效果完全是由我们的数据决定的。

它的使用方法很简单,在最基本的用法当中,我们只需要传入两个list,分别代表x轴和y轴的值即可。比如我们要作出一个logistic的函数图像。我们可以这样:

x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))

plt.plot(x, y)
plt.show()

在上面的代码当中我们首先使用numpy当中的linspace函数生成了一个-10到10之间的numpy数组。这个数组当中有100个点,在-10到10之间均匀分布。我们对它计算对应的logistic函数的值,也就是y = 1 / (1 + np.exp(-x))。这个函数我想大家都应该很熟悉了,x是一个一百个点的list,对应的y也是一个一百个点的list。也就是说一个x对应一个y构成了一个点对,代表图中的一个坐标。

我们不需要做任何转化,只需要把这两个数组传入plt当中,它会自动替我们完成坐标的映射。最后呈现的效果如下。

matplotlib教程——强大的python作图工具库

我们可以看到作图的效果还是不错的,除了把图像完成的绘制出来之外,还替我们在坐标轴上画上了点位,方便我们查看数据。

直方图

hist可以用来绘制直方图,这也是我们非常常见的图像。在财经领域我们经常用直方图反应一个数据的走势,在数据分析和机器学习当中我们也经常用直方图来反应某一个特征或者是值的分布。

在直方图当中我们只需要传入一个数组,就是我们要求分布的数组,另外我们需要再输入一个参数bins,表示我们希望将数据分桶的数量。然后它会绘制出每个桶中数据数量的直方图,这样我们就可以很直观地看出分布来了。

x = np.random.normal(size=200)
plt.hist(x,bins=30)
plt.show()

这里我们调用numpy当中以正态分布概率随机的函数,得到的结果应该是正态分布的。

matplotlib教程——强大的python作图工具库

我们查看图像,这个结果和我们的预期基本吻合。

点状图

第三种图像叫做散点图,它反应的是每个点的分布情况。比如我们之前在介绍KNN和Kmeans模型的时候曾经都作过散点图,一个点代表一个样本,通过散点图我们观察的也是样本和数据分布的情况。但是和直方图相比它更加得直观,我们能直接看到分布,而不是一个分布的统计结果。

但是它也有缺点,缺点就是我们只能观察二维平面当中的点的分布,毕竟超过3维的维度就没办法绘制了。而且3维的数据分布也不是很好观察。

同样散点图的绘制也很简单,我们只需要调用scatter函数传入x和y的数组即可。

x = np.random.rand(100)
y = np.random.rand(100)

plt.scatter(x, y)

这里我们的x和y都是随机分布,所以得到的结果是散乱没有规律的点。

matplotlib教程——强大的python作图工具库

饼状图

最后我们来看下饼状图,饼状图也很常用,虽然也是反映的数据分布,但是它更多是体现某一个值占的比例。通过饼状图,我们可以很直观地了解到这点。

我们可以传入一个list进入pie函数,plot会根据list当中值在总体的占比绘制饼状图。我们来看个很简单的例子:

a = np.array([0.5, 0.3, 0.2, 0.1, 0.8])

plt.pie(a)

得到的结果如下:

matplotlib教程——强大的python作图工具库

和之前的结果相比饼状图稍稍不清晰一些,因为它虽然用不同颜色区分了不同的区域的,但是我们很难直观地看出来每一个区域分别代表什么。这个问题是可以解决的,我们可以通过传入一些参数和设定来让它展示更多的信息,让数据变得更加生动以及清晰。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

以上就是matplotlib教程——强大的python作图工具库的详细内容,更多关于python matplotlib的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
解决Python传递中文参数的问题
Aug 04 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
Python 解析简单的XML数据
Jul 24 Python
Python实现播放和录制声音的功能
Aug 12 Python
如何用Python徒手写线性回归
Jan 25 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 #Python
详解pycharm配置python解释器的问题
Oct 15 #Python
详解查看Python解释器路径的两种方式
Oct 15 #Python
几款Python编译器比较与推荐(小结)
Oct 15 #Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 #Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 #Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 #Python
You might like
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP实现的简单日历类
2014/11/29 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
车间主管岗位职责
2013/11/14 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
使用scrapy实现增量式爬取方式
2022/06/21 Python