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所示

    圖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所示

圖2.png
  1. 但通用的方法還是給plot()傳入數組
    import numpy as np
    array = np.arange(0, 5, 0.1)
    plt.plot(array, array**2, 'bs')
    結果如圖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風格

常用的屬性

多圖和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就理解為一行三列的第二副圖

上面程序的運行結果:

Figure1.png
Figure_2.png
  1. 上面的創建圖和子圖的方法有些麻煩,有一種更為簡單的方法:
    使用plt.subplots創建新的figure,返回值為已創建subplot對象的Numpy數組:
    >>>fig, axes = plt.subplots(2, 3)
    >>>axes
    [[<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940B0D940>
    <matplotlib.axes._subplots.AxesSubplot object at 0x0000022940CAC550>
    <matplotlib.axes._subplots.AxesSubplot object at 0x0000022940CE5240>]
    [<matplotlib.axes._subplots.AxesSubplot object at 0x0000022940D77748>
    <matplotlib.axes._subplots.AxesSubplot object at 0x0000022940D88FD0>
    <matplotlib.axes._subplots.AxesSubplot object at 0x0000022940E41780>]]
    結果如圖6,在一個figure中創建了6個子圖

    圖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所示

圖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所示

圖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所示

圖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')

總結一些自己學習的知識點,謝謝!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容