其他
matplotlib绘图保姆级教程:看过的人都说好!
但是在学习之前,有一点非常重要,这也是我在学习的时候碰到的问题——在matplotlib中绘制出同样的图有很多种方法,而在这所有的方法中间,有两个领头大佬:plt和ax,常常会让人混淆。
所以在正式的绘图前,我们先用几分钟弄清这两者的区别以及matplotlib是如何利用这两者进行工作的,弄清楚之后你就不再是离开谷歌就没法画图的脚本搬运工啦!
plt和ax区别
首先,当我们说到plt时,应当知道这个是大多数人导入matplotlib包时的别名。
1import matplotlib.pyplot as plt
在matplotlib的官网上对于用matplotlib绘制出来的图有一个生动的介绍:
matplotlib官网(https://matplotlib.org/1.5.1/faq/usage_faq.html#parts-of-a-figure)
知道这一点后,我们再来看单个Axes中每个元素的名字:
1# 使用plt
2plt.figure()
3plt.plot([1,2,3],[4,5,6])
4plt.show()
1# 使用ax
2fig,ax = plt.subplots()
3ax.plot([1,2,3],[4,5,6])
4plt.show()
结果如下:
回答:其实两张图是一模一样的。不知道你们有没有回答对(手动狗头)。那么两者的区别到底是在哪里呢,其实是在你没法看到的程序实现阶段。使用plt时,我们先生成了一个画布,然后在这个画布上生成了一个隐式区域进行绘图,而在使用ax时,则是生成了画布和画图区域两个对象之后再进行的绘图操作。可以理解为,其实plt有点像薛定谔的图,没有出图之前你并不知道这个图会出现在哪里,而利用ax进行绘制时,图是握在你自己的手上的。
绘制柱状图
那么在这个教程中,我们就以绘制柱状图为例子来进行学习。在进行绘制之前,作为金牌推销员还要再推荐一个python包,搭配matplotlib简直不能更好用——那就是pandas。
1#导入所需的包
2import pandas as pd
3import matplotlib.pyplot as plt
4#如果标签为中文需导入中文字体,确认SimHei字体已在库中
5plt.rcParams['font.sans-serif'] = ['SimHei']
6plt.rcParams['axes.unicode_minus'] = False
7#先自己给一个数据,如果是excel表格直接导入即可
8df = pd.DataFrame({'x':['January','February','March','April','May','June'],'y':[20,30,15,25,27,21]})
9#绘图
10fig,ax = plt.subplots()
11x=[i+1 for i in range(len(df['x']))]
12ax.bar(x,df['y'],width=0.4,color='skyblue', ec='black')
13#添加柱子上数字
14for a, b in zip(x, df['y']):
15 ax.text(a,b+0.5,b,ha='center', va='bottom', fontsize=10)
16#添加x轴标签
17ax.set_xticks(x)
18ax.set_xticklabels(df['x'])
19#添加图标签
20ax.set_title('Sales')
21ax.set_ylabel('Sales')
22plt.show()
其中,添加标签等在任意图中都适用,在柱状图的绘制中,重要的是ax.bar(),使用方法为:
1ax.bar(x,height,width,bottom,align,**kwargs)
2#x为横坐标的值
3#height为各柱子的高度
4#width为柱子的宽度,默认是0.8
5#bottom为柱子底部开始的位置,默认为0
6#align柱子的底部是在中心还是边缘,默认为center
7#**kwargs各种图都适用的参数,例如color表示柱子的颜色,edgecolor简写ec,表示柱子边框颜色等等
那么其他类型的图,则用不同的包即可,例如:散点图或折线图:ax.plot(),饼图:ax.pie()等等,其实方法都是一样啦!
END
作者:llama
审稿:童蒙
编辑:amethyst
往期回顾
◆如何快速获得正确的gene symbol◆详细介绍Tensors的使用◆深度学习在scRNA-seq数据处理中的应用◆差异可变剪接软件哪家强?