Pandas教程写的差不多了,来写一写与数据可视化相关的Matplotlib
系列教程吧。读过Pandas系列文章的读者应该都知道,我写文章更多的会融入我对这个东西的理解,Matplotlib
系列也是如此。这个系列会涉及Matplotlib
的一些简单的概念、绘图原理、常见图形的绘制以及一些高阶的绘图技巧。学完之后,期待达到的效果是可以用Matplotlib
画出这样的图形。
# 第一种方式
plt.figure()
plt.plot([1,2,3],[4,5,6])
plt.show()
# 第二种方式
fig,ax = plt.subplots()
ax.plot([1,2,3],[4,5,6])
plt.show()
绘图效果如下
可以看到,不论是用plt.plot()
还是ax.plot()
,结果都是一样的
那区别在哪里?
从第一种方式的代码来看,先生成了一个Figure
画布,然后在这个画布上隐式生成一个画图区域进行画图。
第二种方式同时生成了Figure
和axes
两个对象,然后用ax
对象在其区域内进行绘图
如果从面向对象编程(对理解Matplotlib
绘图很重要)的角度来看,显然第二种方式更加易于解释,生成的fig
和ax
分别对画布Figure
和绘图区域Axes
进行控制,第一种方式反而显得不是很直观,如果涉及到子图零部件的设置,用第一种绘图方式会很难受。
在实际绘图时,也更推荐使用第二种方式。
subplot的绘制
下面通过介绍subplots
加深对第二种绘图方式的理解
假如现在我要在一张纸上左边画一个折线图,右边画一个散点图,该如何画呢?
首先要有一个画布Figure
,其次,需要有两个区域Axes
(等价于两个子图subplot
)来画图
# 生成画布和axes对象
# nrows=1和ncols=2分别代表1行和2列
fig,ax = plt.subplots(nrows=1,ncols=2)
因为这里有两个画图区域,所以ax
对应的是一个列表,存储了两个Axes
对象。
然后分别控制左边和右边的绘图区域进行绘图
fig,ax = plt.subplots(nrows=1,ncols=2)
ax[0].plot([1,2,3],[4,5,6])
ax[1].scatter([1,2,3],[4,5,6])
其实到这里了也会发现,一个Axes
对象对应了一个subplot
子图,这些个子图都是画在同一个画布Figure
之上。
读到这里可能已经对Matplotlib
绘图有点感觉了,下一篇系列文章会接着介绍Matplotlib
常见组件的设置,有什么疑问可以点下面的的链接给我留言!
往期文章
本文分享自微信公众号 - 大邓和他的Python(DaDengAndHisPython)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。