zoukankan      html  css  js  c++  java
  • matplotlib绘制精美图表

    matplotlib-绘制精美图表
    matplotlib是一个在python下实现的类matlib的纯python的三方库,旨在用python实现matlab的功能,是python下最出色的会图库,功能很完善,风格跟matlib很相似。

    我们画图的目的是将函数以图片的形式展示出来,所以需要关注两个方面的东西:1.函数 2.图片 函数方面使用的是numpy这个库,其中包括了很多科学计算的功能。

    1.matplotlib中的快速绘图的函数库可以通过如下语句载入:
    import matplotlib.pyplot as plt

    2.接下来调用figure创建一个绘图对象,并且使它成为当前的绘图对象。
     

    plt.figure(figsize=(8,4))
    通过figsize参数可以指定绘图对象的宽度和高度,单位为英寸;dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。因此本例中所创建的图表窗口的宽度为8*80 = 640像素。

    3.通过调用plot函数在当前的绘图对象中进行绘图:
     

    plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
    plt.plot(x,z,"b--",label="$cos(x^2)$")

     *x,y均为成员数量相同的数组
     •label : 给所绘制的曲线一个名字,此名字在图示(legend)中显示。只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。
     •color : 指定曲线的颜色
     •linewidth : 指定曲线的宽度


    plt.xlabel("Time(s)")
    plt.ylabel("Volt")
    plt.title("PyPlot First Example")
    plt.ylim(-1.2,1.2)
    plt.legend()
     •xlabel : 设置X轴的文字
     •ylabel : 设置Y轴的文字
     •title : 设置图表的标题
     •ylim : 设置Y轴的范围
     •legend : 显示图示

    4.最后调用plt.show()显示出我们创建的所有绘图对象。

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://flyfeeling.blogbus.com/logs/53148228.html

    matplotlib是python中一个用于画图的一个包,在matplotlib的主页上是这么介绍的:matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. 目前matplotlib的最新版本是0.99.1,可以进入他的官网进行下载:http://matplotlib.sourceforge.net/

    使用matplotlib来画图已经很长时间了,零零碎碎的也积攒了很多小tips,但是一直没怎么整理,在这个帖子里,我准备将平时所用到的小tips做一个小结,在以后也会不定期的进行更新。

    首先介绍一下matplotlib中最常用的一个子模块,pyplot。这个包中包含常用的绘制二维曲线的方法,也是实际中应用最多的一个字包。因此通常我们用matplotlib绘图的时候首先需要引入这个包,即

    import matplotlib.pyplot as plt

    下面介绍二维图中的常用的几个概念

    figure:定义一个图片

    fig = plt.figure()

    axes:定义图片中的一块绘图区域,在实际作图中,通常使用下面的方法

    ax = fig.add_subplot(111)  

    可以将图片划分为几个绘图区域,括号中的三个数字分别表示将图片划分为几行、 几列,以及选取第几个绘图区域,因此,如下的语句表示,将图片划分为2行2列,供4个区域,ax是其中的第三个区域,注意在这里是按照行来数的,即图片的左下角的区域。

    ax = fig.add_subplot(223)

    括号中的数字也可以用逗号隔开,即

    ax = fig.add_subplot(2,2,3)

    axis:表示绘图区域的一个坐标轴,有x轴和y轴之分,分别可以通过以下方法取得

    xaxis = ax.xaxis

    yaxis = ax.yaxis

    以上的三个概念是绘图中使用最多,大部分操作也是在其中完成的。

    下面介绍一些经常使用到的一些操作。

    1. 画二维曲线图

    x = arange(0,5,0.1)

    y = [math.sin(a) for a in x]

    ax.plot(x,y,"ro-")

    图片结果如图1所示,双引号里面的三个字符分别表示曲线颜色,点的形状,线的形状。也可以用以下的方式显示指定:

    ax.plot(x,y,color='r',linestyle='-',marker='o')

    color的取值可以参见表1,或者使用RGB的值,即color=(1,0,0)。

    linestyle与marker的取值可以参见表2,默认的线形为'-',点形为'o'。如果只想表示散点图,可以使用

    ax.plot(x,y,"ro")

    或者

    ax.plot(x,y,color='r',linestyle='',marker='o')

                       图1                                                         表1

                                                               表2

    在实际中,我们可能经常会用到对数坐标轴,这时可以用下面的三个函数来实现

    ax.semilogx(x,y)           #x轴为对数坐标轴

    ax.semilogy(x,y)           #y轴为对数坐标轴

    ax.loglog(x,y)              #双对数坐标轴

    2. 图形标注

    这个命令很简单,如果在plot语句中使用了label属性,那么使用legend语句即可自动在图片中添加一个标注框,如下:

    x = arange(0,5,0.1)

    y = [math.sin(a) for a in x]

    ax.plot(x,y,"ro-",label = "sin(x)")

    y = [math.cos(a) for a in x]

    ax.plot(x,y,"bx-",label = "cos(x)")

    ax.legend()

    程序运行结果如图2所示。

    当然我们可以指定legend的位置,如下:

    ax.legend(loc='lower left')

    或者

    ax.legend(loc=3)

    location的可选参数见表3.

                               图2                                                                      表3

    3. 坐标轴的标题

    在图2中,我们使用下面语句来定义坐标轴标题

    ax.set_xlabel("x")
    ax.set_ylabel("sin(x),cos(x)")

    4. 数学公式编辑

    图2中的图形标签与坐标轴的标题都是用常规字体来显示的,那么很多时候我们希望它们显示成数学公式的样子,或者有时候直接就需要编辑一个数学公式,里面可能包括一些拉丁字母或者数学符号等,这时候我们需要借助用:LaTex。

    LaTex是一款排版软件,是编辑论文的常用工具,也可以处理日常生活中的各种文档,如写信、写书、画表格,甚至做幻灯片。它和word的主要区别在于:word是“所见即所得”,而LaTex是“所想即所得”。在LaTex里编辑公式是依靠一系列命令生成的。

    当然在这里,我不准备将篇幅全部用于LaTex上面,感兴趣的朋友可以自己google学习之。在matplotlib里面,也可以使用LaTex的命令来编辑公式,只需要在字符串前面加一个“r”即可,这里给大家看一个简单的例子。

    x = arange(1,1000,1)
    r = -2
    c = 5
    y = [5*(a**r) for a in x]
    ax.loglog(x,y,label = r"$y = c*x^{\gamma}, c=5,\gamma=-2$")
    ax.legend()
    ax.set_xlabel(r"x")
    ax.set_ylabel(r"y")

    程序执行结果如图3所示,这实际上是一个power-law的例子,有兴趣的朋友可以继续google之。

                                  图3

    关于LaTex的更多命令,可以参见matplotlib的官方教程:

    http://matplotlib.sourceforge.net/users/mathtext.html#mathtext-tutorial

    5. 控制坐标轴的显示

    前面所有的例子的坐标轴的所有显示(如最大值,最小值,间隔大小,显示方式等等)都是使用的默认生成方式,而实际上,我们也可以用几句命令很方便的进行修改。下面用例子来说明吧:

    x = arange(0,5,0.1)

    y = [10*math.sin(a) for a in x]

    ax.plot(x,y,"ro-",label = "sin(x)")

    ax.set_xlim(1,4)                            # 设定x轴范围

    ax.set_ylim(-8.5,11)                      # 设定y轴范围

    ax.set_xticks(range(1,4.1,0.5))       # 设定x轴的标签

    ax.set_yticks(range(-8,11,2))         # 设定y轴的标签

    程序运行结果如图4所示,而如果你希望你的坐标轴上的标签显示的不是数字,而是一些设定好的文字,当然也可以:

    ax.set_xticklabels(list("abcdefg"))     # 设定x轴的标签文字

    显示结果如图5所示

                                 图4                                                                        图5

    通过set_xticks与set_xticklabels的结合,我们就可以任意变换我们想要的x轴标签的显示形式了,记住,set_xticks是设定标签的实际数字,而set_xticklabels则是设定我们希望他显示的结果。

    补充:

           1.label翻转的实现,在输出到页面之前,使用:fig.autofmt_xdate() 或者 ax.set_xticklabels(group_labels, rotation=120)    rotation就是翻转的角度
     

  • 相关阅读:
    利用Java API通过路径过滤上传多文件至HDFS
    docker-compose部署haproxy
    PM2 常用命令
    shell脚本循环访问url直到状态码返回200跳出循环
    CentOS 7.6安装配置Chrony同步系统时钟
    PostgreSQL9.5数据库锁表问题分析与解决
    linux系统netstat命令详解(netstat常用运维命令)
    linux目录备份脚本
    PostgreSQL 锁等待监控 珍藏级SQL
    docker部署pgadmin4并通过nginx反向代理
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145010.html
Copyright © 2011-2022 走看看