美文网首页
Pyplot tutorial

Pyplot tutorial

作者: mhye | 来源:发表于2015-11-08 00:24 被阅读831次

    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](https://img.haomeiwen.com/i1094799/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形式的数学符号。例如![](https://img.haomeiwen.com/i1094799/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()

    ![](https://img.haomeiwen.com/i1094799/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)。
    #未完待续。。。

    相关文章

      网友评论

          本文标题:Pyplot tutorial

          本文链接:https://www.haomeiwen.com/subject/ncbchttx.html