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

總結:以上所說,都是比較常用的,參數也相對簡單,從這些例子中也能看到,看似簡單的東西,背后往往復雜,要學的東西依然還有很多,加油吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM