江湖上所公认的一句话,字不如表,表不如图!人们往往都更喜欢看图说话,那么用python的各位大侠们,大家都在用什么画图呢?各种各样的画图包犹如各式各样的兵器,有的兵器功能单一但是在细分领域超级专业无敌,有的兵器功能多而全,用法灵活。
众所周知,matplotlib是python绘图的基础包,能够生成各种各样2D或者3D的图形,用法算是多而全的那种,下边是matplotlib官网首页作为例子的几张图,大家感受一下:
![085fd33b96856b42135a0e82e9a9c938.png](https://i-blog.csdnimg.cn/blog_migrate/9b4c49787e233ef36d7c0078ab6d0e22.jpeg)
什么?丑拒?不不不,别激动!其实matplotlib一直是一个低调奢华有内涵的包,需要我们透过它朴实无华的外表认清它丰富多彩的内在,来康康这条妖娆的曲线,有没有感受到它的召唤?内心会不会有了一丝丝想要学习的冲动?
![f29e955e759ca5e055a2dc4dfe41b4ae.gif](https://i-blog.csdnimg.cn/blog_migrate/b26e7185c99afe083584ec8efe4b38ac.gif)
啊?太妖娆了啊?有文艺的,比如这个动态的雨滴图:
![62e45a401684de082f8b984aa95d0f3b.gif](https://i-blog.csdnimg.cn/blog_migrate/769b43e67f55f45f8c5dfef59d0065ab.gif)
会不会联想到玻璃窗氤氲着雾气的咖啡馆外,散落着几片梧桐落叶的街道,滴滴答答落下的雨珠在浅浅的小水洼中激起朵朵水花,还差一把伞两个人就可以脑补一出戏的那种。。。。。
咳咳。。。联想能力有点强,差点hold不住。总之不管有什么样的想法,matplotlib大概率都能想办法实现,3D图像也不在话下,比如官网首页的那四个图最后一个就是3D的呢!
嗯~?太小?看不清?这都不叫事儿,3D清晰大图来一个!
![def72af2681ce02a9cdd43d62af951ee.png](https://i-blog.csdnimg.cn/blog_migrate/28f52efcea68bdc743742b8f3c14f4db.jpeg)
个人感觉这个像帽子一样的3D图,不论是从配色还是到形状都还挺好看的。这“帽子”是官网上给的示例图,只不过背景上的格子线和刻度被我去掉了,看起来还蛮有质感的样子。
所以,不管是2D还是3D,抑或是静态、动态,matplotlib统统都搞得定。
既然matplotlib如此强大,那么新的问题来了,它会不会很难学?
答案简单粗暴又有力,那就是:不会!
用matplotlib实现画图并不难,当然要实现上边的动态图和3D图会有一点难度,但这也只是相对于简单绘图而言,画图的逻辑并没有相差很多,通过简单的图形学会运用matplotlib绘图的逻辑以及基础的知识,再把这些逻辑和知识细节运用到复杂的图形中去,循序渐进,水到渠成!
光说不练假把式,有句话叫做“Talk is cheap !Show me the code !”
那么我们就从一个简单又基础的折线图开始,揭开matplotlib的层层面纱,愉快的探索它的各种应用吧。
画一条折线
虽然说是画折线图,但是有些步骤是画图通用的,比如说…导包
![aef0a2a740cd9b9a52225bb283bfe3e5.png](https://i-blog.csdnimg.cn/blog_migrate/84d5fec8d34d582d1a907969e0a2b420.jpeg)
我们的matplotlib依赖numpy包构建,而且绘图过程中有时也会需要用numpy生成一些数字,所以导入绘图包matplotlib之前都会先导入numpy包,而pandas也是进行数据处理的包,并且实际工作中,用来画图的源数据很多时候是表格数据,所以能够处理表格数据的pandas包也要一起导入进来。
另外,在matplotlib中包含两个模块,pyplot和pylab,我们这里只导入了pyplot模块,对于初学者来说可能会不太理解这两个模块都是做什么的,为什么只导入pyplot呢?
Matplotlib是整个软件包;pyplot和pylab是matplotlib中的模块;pylab是一个便捷模块, 在单个名称空间中批量导入 matplotlib.pyplot(用于绘图)和numpy(用于数学以及使用数组)。尽管许多示例都使用pylab,但不再建议使用。对于非交互式绘图,建议使用pyplot创建图形,然后使用OO接口进行绘图。(以上是官网给出的关于matplotlib与两个模块之间关系的解释)
是不是理解了为什么只导入matplotlib.pyplot啦?
让我们来绘制一个简单的折线图吧!
第一步,先解决数据来源问题,也就是我们是要将哪些数据转化成图,这里用前边导入的numpy包生成一些数据用来绘图。
![982ac1b9ceb077db7567164d97417659.png](https://i-blog.csdnimg.cn/blog_migrate/6d6b63907f4fe30240fbaf8208063cce.jpeg)
生成了200个取值范围在-1到1之间的浮点数,并且运用函数创建了x和y之间的关系,下边我们就对这组关系进行绘图,对于这种简单的绘图,可以省略很多步骤,直接调用绘制折线图的函数plt.plot()一步出图:
![bf4a3475d42426aaa88db2fc1a6ae0e3.png](https://i-blog.csdnimg.cn/blog_migrate/0491acc37867680a55f754f0cbe09081.jpeg)
![a895e27c5d9b339e72b3b380ff5b2db3.png](https://i-blog.csdnimg.cn/blog_migrate/14c04ccff37b8114e4b500caa01fb06a.jpeg)
喏,这就是上边的几行代码绘制出的折线图,反应的函数关系是y = x^2,是不是超级简单?
觉得太简陋了?
嗯~~就算是手绘一张函数的图像,也要有图标题、轴标签、图例等等内容,好的!那我们就来完善一下这个简陋折线图,让它完整更美观。
而且,这套流程也适用于折线图之外的其他类型的图,其他图也可以参考这套思路来进行完善哦。
![4a525ab7612194c0b0db9fd5ce020c38.png](https://i-blog.csdnimg.cn/blog_migrate/b77faeb721f37396e9b444550155f5cf.jpeg)
得到的图:
![3d93140cdeb523cf6d18432352fed5a4.png](https://i-blog.csdnimg.cn/blog_migrate/246a9c461bfeed78cd2167a478abed9a.jpeg)
通常能够进行设置的标题、标签、图例等,都在代码中用注释的形式写的很清楚了,所以不再占篇幅进行赘述。那么对于一个折线图,能够进行设置的就只有这些内容了嘛?当然不是,比如说折线的线条样式,线条颜色,线条上点的样式、大小、颜色等等,可以设置的内容多到超乎想象,然而实际的工作中用不到这么多的设置,有兴趣的小伙伴,在运行plt.plot()这个函数之前,通过shift+tab快捷键调出函数的帮助文档,可以探索更多的应用。
这是我的一点点探索:
![24e132015497a503d99d2f81ab43b17a.png](https://i-blog.csdnimg.cn/blog_migrate/2e7030588972a1248e20bb858027fd46.jpeg)
绘制出的图像如下:
![b2038e84b389ba0a0ff57bedae7f83e7.png](https://i-blog.csdnimg.cn/blog_migrate/295ddfc78c317e4638a360d1eaf11f6c.jpeg)
额~~~有点丑,不要在意这些细节哈,毕竟配色、线条、标记什么的鼓捣了半天才鼓捣出一个看起来不太辣眼睛又能显示常用参数作用的图,我大概是五行缺美商吧。。。。。竟然觉得这个图画出来有点像项链(捂脸)。
那么,折线图能够进行设置的就是这些了嘛?能画出来的图就是以上展现出来的这些嘛?当然不!最前边那条妖娆的曲线本质上也是折线图,而且对于图形来说可以进行设置的也不止这些,展现出来的这些大概可以算作是比较丰厚的新手村礼包,至于还可以进行哪些设置实现哪些效果呢,留个悬念、卖个关子,下次再说咯!嘿嘿!