pyplot介绍

matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。绘图函数是直接作用于当前axes(matplotlib中的专有名词,图形中组成部分,不是数学中的坐标系。)
举一个简单的例子:

    import matplotlib.pyplot as pltplt.plot([1,2,3,4])plt.ylabel('some numbers')plt.show()

运行结果

你可能会很疑惑X和Y轴为什么是0~3和1~4。原因是这样的,这里我们只是为plot()命令提供 了一个list或者是array,matplotlib就会假设这个序列是Y轴上的取值,并且会自动为你生成X轴上的值。因为python中的范围是从0开始的,因此X轴就是从0开始,长度与Y的长度相同,也就是[0,1,2,3]。

plot()是一个灵活的命令,它的参数可以是任意数量,比如:

    plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

这表示的是(x,y)对,(1,1)(2,4)(3,9)(4,16)。这里有第三个可选参数,它是字符串格式的,表示颜色和线的类型。该字符串格式中的字母和符号来自于MATLAB,它是颜色字符串和线的类型字符串的组合。默认情况下,该字符串参数是’b-‘,表示蓝色的实线。
举一个使用红色圆圈绘制上述点集的例子:

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

可以查看plot()的文档,那里有完整的关于线的类型的说明。axis()命令可以方便的获取和设置XY轴的一些属性。

如果matplotlib仅限于使用上面那种list,那么它将显得毫无用处。通常,我们都是使用numpy数组,实际上,所有的序列都将被在内部被转化成numpy数字。下面的例子是使用一个命令用几种不同风格的线绘制一个数组:

    import numpy as npimport matplotlib.pyplot as plt# 0到5之间每隔0.2取一个数t = np.arange(0., 5., 0.2)# 红色的破折号,蓝色的方块,绿色的三角形plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')plt.show()

  • 控制线的属性
    线有许多属性可以设置:线宽、线的形状,平滑等等。这里有一些设置线属性的方法:

    • 使用关键字参数
    plt.plot(x,y,linewidth=2.0)
    • 对线对象(Line2D)使用set_方法,plot()会返回一个线对象的列表,比如line1, line2 = plot(x1, y1, x2, y2)。下面的代码我们将假设我们只有一条线,即返回的线对象列表的长度为1。
    line, = plt.plot(x, y, '-')
    line.set_antialiased(False) # 关闭平滑
    • 使用setp()命令。 下面的例子使用的是MATLAB风格的命令去设置一个线的列表的多个属性。setp()可以作用于一个列表对象或者是一个单一的对象。你可以使用python风格的关键字参数或者是MATLAB风格的string/value对为参数:
    lines = plt.plot(x1, y1, x2, y2)# 使用关键字plt.setp(lines, color='r', linewidth=2.0)# 或者是MATLAB风格的string/value对plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

    这是一些Line2D的属性和取值:

  • 工作在多图形(figures)和多坐标系(axes)
    MATLAB和pyplot都有当前图形(figure)和当前坐标系(axes)的概念。所有的绘图命令都是应用于当前坐标系的。gca()和gcf()(get current axes/figures)分别获取当前axes和figures的对象。通常,你不用担心这些,因为他们都在幕后被保存了,下面是一个例子,创建了两个子绘图区域(subplot):

    import numpy as np
    import matplotlib.pyplot as pltdef 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("2subplot")
    plt.subplot(211)
    plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(212)
    plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
    plt.show()

    figure()命令在这儿可以不写,因为figure(1)将会被默认执行,同样,subplot(111)也是默认被执行的。subplot()中的参数分别指定了numrows、numcols、fignum,其中fignum的取值范围为1到numrows*numcols,分别表示的是将绘图区域划分为numrows行和numcols列个子绘图区域,fignum为当前子图的编号。编号是从1开始,一行一行由左向右编号的。其实subplot中的参数【111】本应写作【1,1,1】,但是如果这三个参数都小于10(其实就是第三个参数小于10)就可以省略逗号。你可以创建任意数量的子图(subplots)和坐标系(axes)。如果你想手动放置一个axes,也就是它不再是一个矩形方格,你就可以使用命令axes(),它可以让坐标系位于任何位置,axes([left,bottom,width,height]),其中所有的值都是0到1(axes([0.3,0.4,0.2,0.3])表示的是该坐标系位于figure的(0.3,0.4)处,其宽度和长度分别为figure横坐标和纵坐标总长的0.2和0.3)。其实subplot和axes的区别就在于axes大小和位置更加随意。
    你可以创建多个figure,通过调用figure(),其参数为figure的编号。当然每个figure可以包含多个subplot或者是多个axes。例子:

    import matplotlib.pyplot as plt
    plt.figure(1)                # 编号为1的figure
    plt.subplot(211)             # figure1中的第一个子图
    plt.plot([1, 2, 3])
    plt.subplot(212)             # figure1中的第二个子图
    plt.plot([4, 5, 6])plt.figure(2)                # figure2
    plt.plot([4, 5, 6])          # 默认使用subplot(111),此时figure2为当      # 前figureplt.figure(1)                # 设置figure1为当前figure;  # 但是subplot(212)为当前子图
    plt.subplot(211)             # 使subplot(211)为当前子图
    plt.title('Easy as 1, 2, 3') # 对subplot(211)命名

    我们可以使用clf()和cla()(clear current figure/axes)清除当前figure和当前axes。
    如果你创建了许多figures,你需要注意一件事:figure的内存直到显示调用close()函数才会被完全释放,否则它并没有被全部释放。如果只是删掉对figure的引用,或者是通过关闭window进程管理器关闭该figure,这都是不完全删除figure的,因为pyplot在内部维持了一个引用,直到close()被调用。

  • 文字
    text()命令可以被用来在任何位置添加文字,xlabel()、ylabel()、title()被用来在指定位置添加文字。

    import numpy as np
    import matplotlib.pyplot as pltmu, sigma = 100, 15
    x = mu + sigma * np.random.randn(10000)# 直方图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$')
    plt.axis([40, 160, 0, 0.03])
    plt.grid(True)
    plt.show()


    所有text()命令返回一个matplotlib.text.Text实例,像上面的线一样,可以通过关键字参数在text()定制文本样式,也可以通过setp()来定制文字的样式:

    t = plt.xlabel('my data', fontsize=14, color='red')
    setp(t,color='blue')
    • 在文本中使用数学表达式
      matplotlib接受任何TeX方程表达式,比如,你可以写成用”$”符号包裹的TeX表达式:
    plt.title(r'$\sigma_i=15$')

    这里的”r”非常重要,它表示后面的字符串是一个纯粹的字符串,不会将后面的反斜杠当作转义字符。matplotlib内置有TeX表达式解释器和排版引擎,和自带的数学字体。因此你可以不用安装TeX就能使用数学表达式,如果你安装了LaTeX和dvipng,你也可以使用LaTex排版你的文字并且直接输出到figures或者是保存。

    • 注释文本
      使用text()命令可以在Axes中任意位置放置文本,一个普遍的文本用法是对一些特性进行注释,annotate()方法让添加注释变得很容易。对于注释有两点需要注意:需要被注释的地方,使用xy参数来指出,还有就是注释文本所放置的位置,使用参数xytext来指定位置,这两个参数都使(x,y)元组:
    import numpy as np
    import matplotlib.pyplot as pltax = plt.subplot(111)t = np.arange(0.0, 5.0, 0.01)
    s = np.cos(2*np.pi*t)
    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()


    这里的xy和xytext所使用的坐标是根据XY轴的刻度的坐标,称为data coordinates。当然也可以使用其他坐标系统,具体参考官方文档。

  • 对数和其他非线性坐标轴(axis)
    matplotlib.pylot不仅仅提供了线性的坐标,还提供了对数(logarithmic)和分对数(logit)坐标。当数据的维度跨越许多数量级时,这种坐标就很有用,改变坐标轴的刻度很容易:

    plt.xscale(‘log’)

    下面是一个例子,对于同样的数据,在Y轴使用不同刻度下的曲线图:

    import numpy as np
    import matplotlib.pyplot as plt# 在区间[0,1]制造一些数据# np.random.normal为高斯分布y = np.random.normal(loc=0.5, scale=0.4, size=1000)
    y = y[(y > 0) & (y < 1)]
    y.sort()
    x = np.arange(len(y))# 创建一个窗口plt.figure(1)# 线性plt.subplot(221)
    plt.plot(x, y)
    plt.yscale('linear')
    plt.title('linear')
    plt.grid(True)# 对数plt.subplot(222)
    plt.plot(x, y)
    plt.yscale('log')
    plt.title('log')
    plt.grid(True)# symmetric logplt.subplot(223)
    plt.plot(x, y - y.mean())
    plt.yscale('symlog', linthreshy=0.05)
    plt.title('symlog')
    plt.grid(True)# logitplt.subplot(224)
    plt.plot(x, y)
    plt.yscale('logit')
    plt.title('logit')
    plt.grid(True)plt.show()


    我们也可以添加自己的刻度和投影。具体这里先不介绍,后续会深入讲解更多matplotlib的用法。

作者也是边学边写博客,有诸多不对之处敬请谅解。


参考文档:Pyplot tutorial


注:转载请注明原文出处:
作者:CUG_UESTC
出处:http://blog.csdn.net/qq_31192383/article/details/53977822

matplotlib(一)——pyplot使用简介相关推荐

  1. Tips--解决安装matplotlib无法使用pyplot的问题

    解决安装matplotlib无法使用pyplot的问题 问题描述 解决方法 问题描述 在安装matplolib的python2版本之后,发现在导入matplolib的时候是成功的: import ma ...

  2. 使用python的matplotlib(pyplot)画折线图和柱状图

    使用python的matplotlib(pyplot)画折线图和柱状图 今天帮师兄赶在deadline之前画论文的图,现学现卖很是刺激,现把使用matplotlib的子库pyplot画折线图和柱状图的 ...

  3. matplotlib之pyplot画饼图(pie)

    from matplotlib import pyplot a=input('请输入已完成人数') b=input('请输入未完成人数')pyplot.rcParams['font.sans-seri ...

  4. matplotlib之pyplot模块——饼图(pie():圆环图(donut)、二层圆环图、三层圆环图(旭日图))

    在matplotlib中pie()不单可以绘制饼图,还可以绘制圆环图(donut).圆环图可以看成饼图的变种,matplotlib没有提供专门绘制圆环图的接口. 在matplotlib之pyplot模 ...

  5. matplotlib之pyplot模块plot函数基础二(线条外观:格式字符串fmt)

    matplotlib之pyplot模块plot函数基础一(函数功能.xy参数基本取值,多组数据)简单说明了plot函数绘制线条的基本功能. plot函数的基本调用签名为plot([x], y, [fm ...

  6. pyplot绘制图片_使用matplotlib的pyplot模块绘图的实现示例

    1. 绘制简单图形 使用 matplotlib 的pyplot模块绘制图形.看一个 绘制sin函数曲线的例子. import matplotlib.pyplot as plt import numpy ...

  7. from matplotlib import pyplot as plt 的基本用法简介

    Matplotlib是Python的一个绘图库,是Python中最常用的可视化工具之一,可以非常方便地创建2D图表和一些基本的3D图表. 它以各种硬复制格式和跨平台的交互式环境生成出版质量级别的图形. ...

  8. matplotlib.pyplot_Matplotlib Pyplot教程

    最近自己经常遇到matplotlib的OO API和pyplot包混乱不分的情况,所以抽时间好好把matplotlib的文档读了一下,下面是大概的翻译和总结.很多基础的东西还是要系统地掌握牢固哇--另 ...

  9. matplotlib之pyplot模块——获取或设置坐标轴刻度及标签(xticks、yticks)

    概述 xticks和yticks函数的作用都是获取或设置坐标轴的刻度及标签.其中 xticks函数作用是获取或设置x坐标轴的刻度及标签. yticks函数作用是获取或设置y坐标轴的刻度及标签. 两者参 ...

最新文章

  1. HDU1531(差分约束+Bellman_ford)
  2. mysql rand()产生随机整数范围及方法
  3. 红曲面怎么做_「曲面建模」CREO陶瓷小摆件的曲面建模,怎么样分析和拆解面...
  4. linux上传下载文件
  5. 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
  6. 七十五、栈+双指针,头条当年接雨水问题
  7. NKU 专题一 题解
  8. 【IOI2018】狼人【Kruscal重构树】【主席树】
  9. STL源码剖析 序列式容器 vector 和 ilist
  10. NginxJava笔记-Webservice使用HTTPS协议及Spring Boot配置tomcat
  11. 程序员初涉江湖 宜步步为赢(转-2) 作者:IT168 职业发展顾问Leo
  12. windows--reg--删除注册表指定的键(也叫项)、指定的值
  13. LINUX C正确遍历environ
  14. vss2005 Internet配置
  15. roberts算子实现
  16. 常见消息中间件大 PK
  17. 前端登陆界面 html+js
  18. 计算机协会活动策划,计算机协会活动策划书
  19. python代码画樱花带图片_python编程——pygame画樱花树
  20. selenium中拖动鼠标通过滑动验证码(geetest)验证

热门文章

  1. 【JAVA】-- 期末考试试题含答案(选择、判断、填空、简答)(二)
  2. 华三交换机配置三权账号(V7版本)
  3. MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】
  4. AMB300母线槽红外测温解决方案某工厂配电密集型母线槽上的案例分享
  5. 新浪看点怎么批量搬运视频,新浪看点视频搬运消重方法
  6. Android变调代码,Android 之 Fmod 变音的实现
  7. Linux系统安装php环境
  8. 极值点与拐点的对应三个充分条件
  9. 2021最新spass数据分析教程 论文spass数据分析教程 数据分析怎么做spass教程
  10. android5.1物联网卡打开,物联网卡这样设置一下上网全程4G!建议收藏!