Pyplot tutorial

matplotlib.pyplot
是一个命令风格的函数,他让matplogtlib像MATLAB一样工作.每个pylot函数都对图片做一些改变。例如,创建一个图像,创建一个绘图区域,在绘图区域绘制线条(line),装饰绘图区域的标签,等等。matplotlib.pylot,做了在不指定的情况下,假定你的操作都在当前figure,当前绘图区域。

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()#我不确定这段代码是否需要,至少在ipython中不需要

Paste_Image.png

你可能对x轴是0-3,y轴是0-4有点心生疑虑,如果你在plot()函数中,只提供一个列表,matplotlib会假定这个列表是y坐标,同时自动为你生成一个从0开始的x坐标,这个x坐标从0开始,同时长度跟你提供的y坐标相同,所以上面的例子中,我们得到的x坐标就是[0,1,2,3].
plot()命令非常灵活,它有一个可选的第三个参数,通过一个字符串来描述颜色和线段类型。字符串的描述方式和Matlab类似,它第一个字母表示颜色,后面表示线段类型。默认格式是'b-',他表示蓝色(b)的实线()。下面的例子绘出了红色圆圈('ro')。

import matplotlib.pyplot
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.axis([0,6,0,20])
plt.show()

Paste_Image.png

格式字符参数完整解释你参看plot()函数的说明。上面示例axis()函数包含一组列表[xmin,xmax,ymin,ymax],以及设定轴显示方式的参数。
如果matplotlib只能处理列表,他对数值处理意义不大,通常你看到的是numpy矩阵。实际上所有的序列在matplotlib内部都是作为numpy arrays处理,下面例子展示了通过不同方式表现numpy arrays。

import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')#红色虚线,黑色方块、绿色三角
plt.show()

调整线型的属性

Lines对象的诸多属性可以设置:linewidth(宽),dash style(虚线样式),等等。详见:matplotlib.lines.Line2D.调用线属性的方法有以下几种。

  • 使用键值参数:
    plt.plot(x,y,linewidth = 2.0)
  • 利用Line2D实例的属性,plt.plot函数会返回一个一个Line2D对象;我们可以用变量来接收这个返回对象,例如line1,line2 = plot(x1,y1,x2,y2)。之后我们就可以对对其进行属性设置
    line = plt,plot(x,y,'-') #接受对象 line.se_antialiased(False)#关闭反锯齿
  • 有点类似于上面的方法,使用setp()命令,设置对象的属性,你可以使用字典方式,也可以使用属性,取值方式。看了下面的例子就明白了
lines = plt.plot(x1,y1,x2,y2)
#字典方式设定
plt.setp(lines,color = 'r', linewidth = 2.0)
#属性,值对方式
plt.setp(lines,'color','r','linewidth',2.0)

下面列出了Line2D的属性表.


想获得当前的可设置属性,可以使用setp()函数调用对象。

>>lines = plt.plot([1,2,3])
>>plt.setp(lines)
alpha:float
animated:[True | False]
...snip

处理多个图片和多个轴

MATLAB和pyplot,都有当前画布figure和当前轴axis的概念。所有的绘制命令都是作用在当前axis上的。'gca()'函数返回当前轴axis(当前轴实例)。'gcf()'返回当前图像(当前图像的实例)。通常你需要考虑这些,因为它会随着上下文切换。

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)
plt.subplot(221)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(224)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

Paste_Image.png

解释下上面的代码:figure()命令实际上在这里是可选的,因为默认会创建figure(1),同样,如果你不指定subplot(),会自动为你创建一个subplot(111).subplot()命令的三个数字分别表示总行,总列数,图片在行列中的位置。比如上图中,221表示2x2 4个区域中的第一区域,224表示第四个。
详见下面的例子:

subplot(221) subplot(222)
subplot(223) subplot(224)

你可以通过figure()创建多个图像.每个图像里增加多个subplot().下面的例子非常重要,它演示了如何在figure和subplot之间切换。
figure可以理解画布,subplot理解为绘图区域。

plt.figure(1)                # 第一个 figure
plt.subplot(211)             # 第一个figure中的第一个subplot
plt.plot([1, 2, 3])
plt.subplot(212)             # 第一个figure中的第二个subplot
plt.plot([4, 5, 6])

plt.figure(2)                # 第二个figure
plt.plot([4, 5, 6])          # 未申明subplot的时候默认为subplot(111)

plt.figure(1)                # 切换回第一个figure的最后一个subplot(212)
plt.subplot(211)             # 将subplot(211)作为当前subplot
plt.title('Easy as 1, 2, 3') # subplot 211 title

clf()和cla()函数清除当前figure()和当前轴绘制的内容。如果你觉得当前figure、当前axis这些参数被上下文掌控有点恼人,别绝望。这只是因为在生成对象时装饰器的作用(不解),有替代方法可以解决(见:Artis tutorial)。

添加文本

text()命令可以用来在任意位置添加文本。xlabel(),ylabel()title()用于在特定位置添加文本。(详解文本介绍)。

import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
#the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')#图片中显示的mu = 100, sigma = 15
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()```

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1094799-74f1ba7e305d897b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
`text()`命令会返回一个matplotlib.text.text实例。跟前面提到的线属性一样,你可以用键值方式修改文本的表现形式,或者使用[setp()](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.setp)函数:
>t = plt.xlabel('my data',fontsize = 14,color = 'red')

#在文本中使用数学符号
matplotlib文本支持TeX形式的数学符号。例如![](http://upload-images.jianshu.io/upload_images/1094799-cd171995b5b3efac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)这样败家的符号,如果你知道TexT就知道应该用$符号环绕表达式(不知道)。
>plt.title(r'$\sigma_i=15$')

*r*在这里不可或缺,表示禁止python将‘\'作为退格符号处理。matplotlib内置Tex表达式和layout引擎,详见:[如何书写数学符号和公式](http://matplotlib.org/users/mathtext.html#mathtext-tutorial)。通过这些工具你不需要安装Tex就可以书写公式和表达式。
#注释文本
[`annotate()`](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.annotate)命令可以为你的图标添加注释信息,注释需要注意两点,1、注释的起始位置xy,和注释文本的起始位置xytext,他们都是(x,y)形式的元组。

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2np.pit)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)

plt.ylim(-2,2)
plt.show()

![](http://upload-images.jianshu.io/upload_images/1094799-e5d9e1ce1c44c866.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
上面的例子中,箭头的xy起始坐标,文本的起始坐标都是参照图表的坐标轴。实际上我们可以指定不同的坐标轴,详见:[Annotating text](http://matplotlib.org/users/annotations_intro.html#annotations-tutorial)和[Annotating Axis](http://matplotlib.org/users/annotations_guide.html#plotting-guide-annotation)。
#未完待续。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 牛刀小试 导入类库:import matplotlib.pyplot as plt 画图:plt.plot([1,...
    Manfestain阅读 2,941评论 0 2
  • 按:plot,figure,Axes这些名词很烦,不尝试翻译了。 Ipython Notebook比较适合演示ma...
    mhye阅读 6,981评论 1 8
  • Python画图之总结待整理 https://morvanzhou.github.io/tutorials/dat...
    jiandanjinxin阅读 17,265评论 1 14
  • Matplotlib 入门教程 来源:Introduction to Matplotlib and basic l...
    布客飞龙阅读 31,757评论 5 162
  • 跟老张出去玩的机会很少,常常是我有时间他在忙。习惯了两个人,我自己也越来越出不了门。给他备好吃的喝的,衣服洗净,垃...
    垛垛阅读 171评论 0 0