zoukankan      html  css  js  c++  java
  • Matplotlib学习笔记(一)

    在最开始接触python科学计算的时候,就知道了Matplotlib这个绘图库。个人是比较喜欢这种可视化的工具,照我看,GUI这种理念几乎是划时代的。如果说numpy是用来处理数据,那么Matplotlib就是用来展示数据的,抽象的数据,以图表的形式展示出来,无论是对自己,还是对看到的人,接受起来都比较轻松,也跟更容易发现数据内部隐藏着的某些规律性。

    Matplotlib似乎是模仿的Matlab,Matlab没有接触过,但是Matplotlib是真的很好用,画出来的图都很优雅,可调整的参数也很多,并且刚开始学也不复杂,官网的帮助文档讲的也都很详细,深入的话当然还是有很多东西的。平常最常用的是pyplot模块,入手并不难,下面简单纪录下,顺便多说句,Matplotlib与numpy高度集成,转换的时候毫无滞碍。

    文章参见这里:http://matplotlib.org/api/pyplot_api.html

    Example1:

    # -*- coding:utf-8 -*-

    # 导入相关模块

    import numpy as np

    import matplotlib.pyplot as plt

    x = np.arange(0, 5, 0.1) # 生成一个numpy数组对象

    y = np.sin(x)

    plt.plot(x, y) # 先是x坐标,后是y坐标

    plt.show() # 没有这句就画不出图

    这是最简单的,plot里的参数都是默认的。效果如下:

    看起来是曲线,其实都是直线,只是因为点与点之间的距离很小,看起来比较平滑,plot默认会将点连接成线

    Example2:

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

    # 增加一个y轴的标签,pyplot模块本身提供了方法

    plt.ylabel('some numbers')

    plt.show()

    这个地方,plot()只提供了一个参数,matplotlib默认是y的,那x的怎么办,matplotlib很聪明,它会自动生成一个,规律就是:从0开始,长度与y相同,效果就就是上图,可以发现,给坐标轴增加标签很简单

    Example3:

    plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') # 多了个参数,自定义显示效果

    # 增加图名、x和y轴的名字

    plt.title('Dot')

    plt.xlabel('x')

    plt.ylabel('y')

    # axis方法定义x轴和y轴的属性

    plt.axis([0, 6, 0, 20])

    plt.show()

    Plot默认是蓝色实线,这里在plot里增加一个参数'ro',显示就变成红色圆点了,更多的效果参照下图。

    Axis方法改变了坐标的属性,参数为[xmin, xmax, ymin, ymax]

    Example4:

    t = np.arange(0, 5, 0.2)

    # plot可以同时接收多个参数

    plt.plot(t, t, 'r--', t, t ** 2, 'bs', t, t ** 3, 'g^')

    plt.show()

    从这个例子中可以看到pyplot的灵活性,效果很多样,都可以自定义,还可以同时接受多个参数绘制在一张图表里

    Example5:

    x = np.arange(0, 5, 0.1)

    # plot可以接受更多的参数

    plt.plot(x, x, linewidth='2.0', color='green')

    plt.show()

    Matplotlib里有专门的Line2D对象,属性很多,远不止这两个,还得继续学习呢

    http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D

    Example6:

    # 定义一个函数

    def f(t):

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

    t1 = np.arange(0, 5, 0.1)

    t2 = np.arange(0, 5, 0.02)

    # 分块

    plt.subplot(211)

    plt.plot(t1, f(t1), 'bo')

    plt.subplot(212)

    plt.plot(t2, f(t2), 'r-')

    plt.show()

    分块显示,应用起来很实际。Subplot里的三位数字,第一个表示行数,第二个表示列数,第三个表示编号。数字相同的话,后面的图像会把前面的覆盖

    Example7:

    mu, sigma = 100, 15

    x = mu + sigma * np.random.randn(10000)

    # hist绘制直方图

    n, bins, patches = plt.hist(x, 50, normed=1, alpha=0.75)

    # text也是个有着复杂属性的对象

    # matplotlib还可以自动转换成数学表达式

    plt.text(60, 0.025, r'$mu=100, sigma=15$', fontsize='20')

    plt.axis([40, 160, 0, 0.03])

    plt.grid(True)

    plt.show()

    这个例子就复杂很多,其中有两点,一个是hist,另一个是text对象

    可参照以下网址:http://matplotlib.org/users/mathtext.html#mathtext-tutorial

    Example8:

    t = np.arange(0, 5, 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()

    想画出这样的图自然没那么简单,参照:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.annotate

    总结:以上所说,都是比较常用的,参数也相对简单,从这些例子中也能看到,看似简单的东西,背后往往复杂,要学的东西依然还有很多,加油吧。

    却道,此心安处是吾乡
  • 相关阅读:
    Ubuntu 18.04 新系统 允许root远程登录设置方法
    《软件需求》读书笔记03
    第十一周总结
    python 遍历迭代器iteration与list的区别
    第九周总结
    大学生运动情况调研计划
    系统需求分析08
    系统需求分析07
    系统需求分析06
    系统需求分析05
  • 原文地址:https://www.cnblogs.com/lucifer25/p/5800944.html
Copyright © 2011-2022 走看看