zoukankan      html  css  js  c++  java
  • Matplotlib简介和pyplot的简单使用

    最近要花一些图,本来是打算用matlab的,但是matlab有时候莫名其妙的挂掉,忍受不了,便找到了matplotlib。我熟悉并且喜欢Python,所以matplotlib替代了matlab。

    使用了几天,感觉还好,不过觉得文档不够全,网页版的有些链接打不开,pdf版本内容也就那么多,很多想找的内容都找不到,于是去看源码。下面整理一些使用心得。主要是用到matplotlib里面的pyplot和与其相关的。
    先看简单的,画一张简单的函数曲线图,

    #导入pyplot,文档里面的例子通常将其别名为plt
    import matplotlib.pyplot as plt
    #创建一幅图
    plt.figure()
    #画出曲线
    plt.plot(x,y)
    #显示
    plt.show()

    通常,除了要把曲线显示出来,还会有其他的要求,比如坐标轴的标注,图的大小,标题,图例,画多条曲线在一张图里,画多张子图在一张图里,类似与matlab里面的subplot,等。下面一点一点的介绍。

    首先看plt.figure(),这个是创建一幅图,可以没有参数,但是,也可以有参数,可以直接看源码的参数说明,
    figsize=(width,height) #这个指定图的大小,单位好像是inch,
    dpi # dot per inch,像素密度,是不是就是类似于iphone显示屏的ppi,视网膜屏的ppi要求在,326ppi,在960x640的3.5寸屏上。
    还有其他参数。

    这里是用plt调用figure(),没有保存其返回值,这个函数是有返回值的,返回一个什么什么Figure对象,

    再看plt.plot(x,y),这个将数据画成曲线,显示,x就对应横坐标,y对应纵坐标,x,y都是一个一维的list,这个是很好理解的。
    plot除了需要x,y这两个参数,还可以有其他参数,比如,指定线的样式,可以是虚线,点线,还有颜色,线的宽度,这些可以使用关键字参数指定。还有一个,这里可以指定label,这个label可以用来作图例的文字。

    最后是plt.show(),这个就是把图像显示出来,好像没什么好说的。

    关于标注和标题
    由于只是一幅图,比较好指定,plt.xlabel(text),plt.ylabel(text),plt.title(text),还可以制定字体大小,使用关键字参数fontsize=16,补充一点就是公式的输入,它支持latex格式的公式输入,就是两个$中间写latex的公式,保证字符串是raw格式,这个还是很好用的。有一个在线的latex公式编辑测试,很好用的,给出链接,http://www.codecogs.com/latex/eqneditor.php

    关于坐标轴范围,
    通过plt.axis([xmin xmax ymin ymax]指定,

    关于网格,plt.grid(True),就可以显示网格。

    关于图例,如果在画曲线的时候制定了label,那么图例也是很简单的,plt.legend()就可以了。在matplotlib里面。有专门的一个legend的类,还很复杂的,暂时不深究了。

    关于画多条曲线,在matlab里面要使用hold on,这个好像不需要,直接继续plt.plot(x,y)就可以了。
    下面看个完整的例子。

    import numpy as np
    import matplotlib.pyplot as plt
    
    def f1(t):
        return np.exp(-t)*np.cos(2*np.pi*t)
    
    def f2(t):
        return np.sin(2*np.pi*t)*np.cos(3*np.pi*t)
    
    t = np.arange(0.0,5.0,0.02)
    
    
    plt.figure()
    plt.plot(t,f1(t),"g-",label="$f(t)=e^{-t} \cdot \cos (2 \pi t)$")
    plt.plot(t,f2(t),"r-.",label="$g(t)=\sin (2 \pi t) \cos (3 \pi t)$",linewidth=2)
    
    plt.axis([0.0,5.01,-1.0,1.5])
    plt.xlabel("t")
    plt.ylabel("v")
    plt.title("a simple example")
    
    plt.grid(True)
    plt.legend()
    plt.show()

    画图结果如下,

    这只是很简单的一种情况,其他的情况,比如两个y轴,多个子图,子图的标题,不标准的子图布局,等,见后面的更新。

  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/Frandy/p/python_pyplot_1.html
Copyright © 2011-2022 走看看