Matplotlib初学

牛刀小试


  1. 导入类库:
    import matplotlib.pyplot as plt

  2. 画图:
    plt.plot([1, 2, 3, 4])
    如果只提供了一个参数给plot()时,默认是给y的,自动生成x。

  3. 给图添加修饰
    plt.xlabel('x label') # 横坐标
    plt.ylabel('y label') # 纵坐标
    plt.title('Test') # 标题

  4. 显示
    plt.show()
    结果如图1所示

    Matplotlib初学_第1张图片
    图1.png

接下来,我们改变一些参数试试:


  1. 可以给plot()传入多个参数:
    plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
    第一个列表参数赋值给x
    第二个列表参数赋值给y
    第三个参数“ro”种r表示颜色,o表示形状

  2. 通过axis()改变坐标轴的度量
    plt.axis([0, 6, 0, 20])
    列表的前两个数表示x轴的范围,0~6
    列表的后两个数表示y轴的范围,0~20

  3. 同样使用plt.show()显示图像
    plt.show()
    结果如图2所示

Matplotlib初学_第2张图片
图2.png
  1. 但通用的方法还是给plot()传入数组
    import numpy as np
    array = np.arange(0, 5, 0.1)
    plt.plot(array, array**2, 'bs')
    结果如图3所示
    Matplotlib初学_第3张图片
    图3.png
设置线条属性

一般有以下几个方法设置线条属性

  1. 使用关键字:plt.plot(x, y, linewidth=2.0)
  2. 使用plot返回一个由二维线条对象组成的列表,该对象有一个setter方法
    line, = plt.plot(x, y, '-') # 此处返回的列表长度为1
    line.set_antialiased(False) # 设置antialising属性为False
  3. 使用setp()命令,可以使用关键字标注和matlab风格的方式
    lines = plt.plot(x1, y1, x2, y2) # 返回线条列表,长度为2
    plt.setp(lines, color='r', linewidth=2.0) # 使用keyword
    plt.setp(lines, 'color', 'r', 'linewidth', 2.0) # matlab风格

常用的属性

Matplotlib初学_第4张图片

多图和axes


Matplotlib和Matlab一样,都有图和子图的概念,图用figure表示,子图用axes表示
所有使用plt的操作都是针对当前的图或子图进行的

  • gca()可以输出当前的axes
  • gcf()可以输出当前的figure
  1. 下面是一个多图多子图的例子:

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

plt.figure(1) # 创建了图1(figure(1))
plt.subplot(211) # 在figure1种生成子图1
plt.plot(x, np.sin(x)) # 在当前子图,也就是子图1种画图
plt.subplot(212) # 在figure1中生成子图2
plt.plot(x, x**2)

plt.figure(2)
plt.subplot(131)
plt.plot(x, x)
plt.subplot(132)
plt.plot(x, 2*x+1)
plt.subplot(133)
plt.plot(x, np.cos(x))

plt.show()

其中:

  • 在创建子图时使用了plt.subplot(211),其中的211可以这样解释:前两位数可以理解为2*1,也就是在figure1中生成两个子图,最后一位1解释为子图编号,也就是figure1中的第一个子图
  • 211也可理解为图的布局为两行一列的第一个图,132就理解为一行三列的第二副图

上面程序的运行结果:

Matplotlib初学_第5张图片
Figure1.png
Matplotlib初学_第6张图片
Figure_2.png
  1. 上面的创建图和子图的方法有些麻烦,有一种更为简单的方法:
    使用plt.subplots创建新的figure,返回值为已创建subplot对象的Numpy数组:
    >>>fig, axes = plt.subplots(2, 3)
    >>>axes
    [[

    ]
    [

    ]]
    结果如图6,在一个figure中创建了6个子图

    Matplotlib初学_第7张图片
    图6.png

    figure过度时会导致内存警告
    可以使用clg()删除当前figure,cla()删除当前的axes

  2. plt针对当前子图进行操作,而axes只关注它本身
    使用axes也可以操作子图
    fig = plt.figure()
    ax = fig.add_subplot(111)
    x = np.arange(1, 5, 0.1)
    y = x**3
    ax.scatter(x, y)
    ax.set_xlabel('x label')
    ax.set_ylabel('y label')
    plt.show()
    结果如图7所示

Matplotlib初学_第8张图片
图7.png

文本工作


  1. 可以使用text()在任意位置添加文本

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$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
结果如图8所示

Matplotlib初学_第9张图片
图8.png

  • 使用plt.text(60, .025, r'$\mu=100,\ \sigma=15$')在点(60, 0.025)处添加了文本u=100, sigma=15
  • plt.grid(True)表示在图中添加网格
  1. 使用annotate()

from numpy import pi
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('point(2, 1)', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)

plt.ylim(-2,2)
lt.show()
运行结果如图9所示

Matplotlib初学_第10张图片
图9.png

使用

plt.annotate('point(2, 1)', xy=(2, 1), xytext=(3, 1.5),
         arrowprops=dict(facecolor='black', shrink=0.05),
               )

来进行注释,point(2, 1)', xy=(2, 1)表示在点(2, 10)处添加文本"point(2, 1)"
xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05)表示注释文本的位置为(3, 1.5)处,arrowprops描述了箭头

使用文本的方法
  1. 所有的test()方法都会返回一个matplotlib.text.Text实例,可以使用关键字参数和setp()的形式使用文本。
    t = plt.xlabel('my data', fontsize=14, color='red')
  2. matplotib可以使用TeX表达式描述任何文本,比如文本
    可以使用“$”包围的TeX表达式描述:
    plt.title(r'$\sigma_i=15$')
 这里有一些常用的数学式表述方式
 http://matplotlib.org/users/mathtext.html#mathtext-tutorial

保存到文件


使用plt.savefig()将当前图保存到文件
例如:将figure保存为svg文件,plt.savefig('figpath.svg')

总结一些自己学习的知识点,谢谢!

你可能感兴趣的:(Matplotlib初学)