matplotlib绘图保姆级教程:看过的人都说好!

作者:llama
审稿:童蒙
编辑:amethyst

如今科研绘图的软件很多,但是如果是需要在脚本中就出图的话,其实python本身自带的matplotlib就非常好用,操作也很简单,跟着小编来看看如何实现吧!

保证看完就会!

但是在学习之前,有一点非常重要,这也是我在学习的时候碰到的问题——在matplotlib中绘制出同样的图有很多种方法,而在这所有的方法中间,有两个领头大佬:plt和ax,常常会让人混淆。

所以在正式的绘图前,我们先用几分钟弄清这两者的区别以及matplotlib是如何利用这两者进行工作的,弄清楚之后你就不再是离开谷歌就没法画图的脚本搬运工啦!

plt和ax区别

首先,当我们说到plt时,应当知道这个是大多数人导入matplotlib包时的别名。
import matplotlib.pyplot as plt

在matplotlib的官网上对于用matplotlib绘制出来的图有一个生动的介绍:

matplotlib官网(https://matplotlib.org/1.5.1/faq/usage_faq.html#parts-of-a-figure

那么其实很容易理解这张图,我们代入自己如果是一个画家,那么其实Figure就是我们画画要用的纸(也就是画布),而Axes则是我们画画的区域,这个区域可大可小,可以是一块区域,也可以是多个区域,在这其中的Axis才是横纵坐标。

知道这一点后,我们再来看单个Axes中每个元素的名字:

matplotlib_usage(https://matplotlib.org/tutorials/introductory/usage.html

那么根据这些,我们来比较plt和ax的区别:

# 使用plt
plt.figure()
plt.plot([1,2,3],[4,5,6])
plt.show()
# 使用ax
fig,ax = plt.subplots()
ax.plot([1,2,3],[4,5,6])
plt.show()

结果如下:

请大家认真看这两张图,回答一下到底哪里不一样?

回答:其实两张图是一模一样的。不知道你们有没有回答对(手动狗头)。那么两者的区别到底是在哪里呢,其实是在你没法看到的程序实现阶段。使用plt时,我们先生成了一个画布,然后在这个画布上生成了一个隐式区域进行绘图,而在使用ax时,则是生成了画布和画图区域两个对象之后再进行的绘图操作。可以理解为,其实plt有点像薛定谔的图,没有出图之前你并不知道这个图会出现在哪里,而利用ax进行绘制时,图是握在你自己的手上的。

绘制柱状图

那么在这个教程中,我们就以绘制柱状图为例子来进行学习。在进行绘制之前,作为金牌推销员还要再推荐一个python包,搭配matplotlib简直不能更好用——那就是pandas。

#导入所需的包
import pandas as pd
import matplotlib.pyplot as plt
#如果标签为中文需导入中文字体,确认SimHei字体已在库中
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#先自己给一个数据,如果是excel表格直接导入即可
df = pd.DataFrame({'x':['January','February','March','April','May','June'],'y':[20,30,15,25,27,21]})
#绘图
fig,ax = plt.subplots()
x=[i+1 for i in range(len(df['x']))]
ax.bar(x,df['y'],width=0.4,color='skyblue', ec='black')
#添加柱子上数字
for a, b in zip(x, df['y']):
    ax.text(a,b+0.5,b,ha='center', va='bottom', fontsize=10)
#添加x轴标签
ax.set_xticks(x)
ax.set_xticklabels(df['x'])
#添加图标签
ax.set_title('Sales')
ax.set_ylabel('Sales')
plt.show()

其中,添加标签等在任意图中都适用,在柱状图的绘制中,重要的是ax.bar(),使用方法为:

ax.bar(x,height,width,bottom,align,**kwargs)
#x为横坐标的值
#height为各柱子的高度
#width为柱子的宽度,默认是0.8
#bottom为柱子底部开始的位置,默认为0
#align柱子的底部是在中心还是边缘,默认为center
#**kwargs各种图都适用的参数,例如color表示柱子的颜色,edgecolor简写ec,表示柱子边框颜色等等

那么其他类型的图,则用不同的包即可,例如:散点图或折线图:ax.plot(),饼图:ax.pie()等等,其实方法都是一样啦!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容