大家好,今天进入新章节的学习,我们来学习matplotlib这个库,想必大家对这个著名的库都有所耳闻,它是python可视化类中在GitHub上提交次数一直处于领先的一个库,在可视化方面有极大的应用。好了,废话不多说,我们下面一步一步地逐层揭开它神秘的面纱,你将看到它就像妙龄女子一样美丽。
起步
我们学习matplotlib主要是学习其中的一个可以说是最重要的模块——pyplot。如果安装了matplotlib的话,直接导入即可。下图是一个可以显示柱状图的最简单的完整骨架。如果遇到中文乱码问题,请参考https://www.zhihu.com/question/25404709,如果图片显示不出来,尝试在第一行添加%matplotlib inline。
上面的程序虽然可以显示柱形图,但是图片过于简陋,下面我们来给它美美颜。设置柱形宽度,颜色,轮廓宽度和轮廓颜色。
上图是横轴标签与柱形图的中间对齐,我们还可以通过设置align属性为edge(边缘对齐)来改变对齐方式,当width为正数时,柱形图左边缘对齐标签,反之则为右边缘对齐标签。
添加柱形图名称和横纵坐标名称、设置bottom属性来改变柱形图底部的纵坐标并修改字体大小。
添加数值以及擦除坐标轴
为柱形图添加数值,通过text方法来添加数字,数字设置为整数,正中心对齐柱形图,底部与柱形图顶部对齐。
上面的部分数字被上面的坐标轴给挡住了,这是我们不能忍受的,当然,我们可以通过ylim方法来增大纵坐标的范围,但是,在这里,我将粗暴地把上面的坐标轴和右边的坐标轴去掉,方法是这样的:通过gca方法获取当前子图,然后把上面和右边的坐标颜色设置为无即可。
柱形图的堆叠
如果想要在一个子图上表示多种性质,就要使用柱形图的堆叠方式,下面表示的是一个人的身高和体重的柱形图。分为左右堆叠和上下堆叠两种方式。
左右堆叠
左右堆叠的思路很简单,只要设置两组柱形图的对齐方式即可。
上下堆叠
上下堆叠的思路也不复杂,将两组柱形图的对齐方式设置为一样即可。
上图的堆叠方式中,红色有部分被绿色部分挡住,如果想要不被挡住,可以通过设置红色部分底部的纵坐标对应等于绿色部分的高度即可。
添加图例以及双纵坐标
上图并没有标明哪个柱形图表示身高,哪个表示体重,这时候就要添加图例来辅助说明,添加图例的方式有很多种,下面我演示的是我个人认为比较简单的一种(其它的大家可以上官网了解),在bar方法中添加一个label属性,然后通过legend方法就可以把图标显示出来,下面的例子中,我在legend方法中设置了很多属性,主要是想要大家认识一下,其实不设置属性也是可以显示图例的。对于这些属性,稍微懂一点英文的都知道这是什么意思,我只解释一下bbox_to_anchor这个属性,可以看到,它是一个元组,第一个数字表示图例上边中心(因为在这里我把位置设置为''upper center'')相对于柱形图横坐标的比值,第二个数字相对于纵坐标的比值。额……再介绍一下loc这个属性吧,它有10个值,分别是八个方位加上中心和best(最佳位置,默认)。0可以表示'best',其它的方位也可以用数字表示,但是这个说实话我记不住。
下面介绍如何设置双纵坐标,其实在这里设置双纵坐标是没有必要的,因为两组数据的纵坐标相差不大,但是为了给大家介绍这个知识点,就不考虑这些了。
简单解释下面的前三行,首先通过figure创建一个画布(暂且这么叫吧),然后在画布上添加一个子图ax1,最后通过twinx方法添加一个与ax1共有x坐标的子图ax2(figure,axes和bar...的包含关系是,figure>axes>bar...)。需要注意的是,在双纵坐标中,如果想要添加图例,两个子图都需要调用legend方法才可,因为它们的位置虽然相同,但其实是两个不同的子图,从体重这个图例就可以看出,我明明设置的是最佳位置,但是他却把身高这个柱形给挡住了,说明它根本不会理会身高的位置,它在乎的是有没有挡住体重这几个柱形。
如果需要把两个图例合并到一起,可以通过fig来整体使用legend方法,因为身高和体重两个子图都是在fig中的。
网友评论