Lesson 03 讀數據並作圖 read data and draw a plot


Lesson 03.1: 2D plot 以x,y的數組作圖
Lesson 03.2: 1D plot 以不同維度數組分別一維作圖
Lesson 03.3: 1D plot 以不同維度數組分別一維作圖, 並做曲線擬合


Lesson 3.1: 2D plot 以x,y的數組作圖


  Code
import numpy as np;
import matplotlib.pyplot as plt; 
Data = np.genfromtxt('workfile.txt',dtype='float');
plt.plot(Data[0:,0], Data[0:,1],"-");
plt.title('Square');
plt.xlabel('X axis');
plt.ylabel('y axis');
plt.savefig("workfile.jpg")
plt.show();

  Note and Comments
import numpy as np; 匯入numpy數據處理程式庫, 並簡化名稱為np
import matplotlib.pyplot as plt; 匯入matplotlib.pyplot繪圖程式庫, 並簡化名稱為plt
Data = np.genfromtxt('workfile.txt',dtype='float'); 用np函式庫中的genformatxt來讀取檔案, 把檔案的內容以字串的float的格式存入Data中
plt.plot(Data[0:,0], Data[0:,1]); 用plt函式庫中的plot函式作圖. 函數原型為plt.plot(x軸數列,y軸數列,"*") 其中*為資料點的標記形式可以更改為其他標記,例如. , 等, 如果是-則是將所有資料點連線做折線圖 

Data在此是一個二維的陣列, 在python中陣列的索引index是由0開始計算. 所以Data[m,n]的意義是第m個陣列元素的第n個數字. 以前一個範例的程式為例, 我們Data[0,0]的數字是1, 我們Data[1,0]的數字是2. 我們也可以指定陣列範圍以供使用,例如Data[0:3,1]就是 1 2 3 前三個陣列元素的第一個數字們. Data[0:3,1]就是前三個陣列元素的第二個數字們. Data[0:,0]表示的是我們取每一個陣列元素的第一個元素(也就是第一行), Data[0:,0]表示的是我們取每一個陣列元素的第二個元素(也就是第二行)

plt.title('Square');設定圖形的標題
plt.xlabel('X axis');設定圖形的x軸的標題
plt.ylabel('y axis');設定圖形的y軸的標題
plt.savefig("workfile.jpg")可利用plt下的savefig指令匯出圖檔, 注意會出圖檔必須在plt.show()之前匯出(plt.show()會清除圖形)
plt.show(); 顯示圖形








Lesson 3.2: 1D plot 以不同維度數組分別一維作圖


  Code

  Note and Comments








Lesson 3.3: 1D plot 以不同維度數組分別一維作圖, 並做曲線擬合


  Code
import numpy as np;
import matplotlib.pyplot as plt; 
Data = np.genfromtxt('workfile2.txt',dtype='float');
z = np.polyfit(Data[0:,0],  Data[0:,1], 1)
fitFun = np.poly1d(z)
plt.title('Fitting')
plt.xlabel('X axis')
plt.ylabel('y axis')
xp = np.linspace(Data[0,0], Data[-1,0],100)
plt.plot(Data[0:,0], Data[0:,1], '*', xp, fitFun(xp), '-')
plt.show()



  說明
import numpy as np;匯入numpy數據處理程式庫, 並簡化名稱為np
import matplotlib.pyplot as plt; 匯入matplotlib.pyplot繪圖程式庫, 並簡化名稱為plt
Data = np.genfromtxt('workfile.txt',dtype='float') 用np函式庫中的genformatxt來讀取檔案, 把檔案的內容以字串的float的格式存入Data中 讀CSV檔案須添加分隔符號delimiter=","標記. 例如np.genfromtxt('workCSV.csv',dtype='float',delimiter=",")
z = np.polyfit(Data[0:,0],  Data[0:,1], 1)  用np函式庫中的polyfit來, 把檔擬合資料. np.polyfir(x,y,n) 中的x, y 是x軸與y軸資料點, n為多項式擬合的最高指數, 例如np.polyfir(x,y,1) 及是以y=ax+b來擬合資料點, np.polyfir(x,y,0) 及是以y=a來擬合資料點,np.polyfir(x,y,0) 及是以y=ax^2+bx+c來擬合資料點. np.polyfit回傳的擬合常數會由高冪次向低冪次回傳. 例如以y=ax^2+bx+c擬合資料時,回傳到z中的值依次為a,b, 與c 
fitFun = np.poly1d(z)np.poly1d(z)是numpy提供的函數,可以將輸入多項式的冪次係數後,可以直接拿來當函數使用. ex:如果Z的值是2與1, 當我們宣告Fun=np.poly1d(z)後, Fun即變為以輸入係數所組成的多項式函數. Fun(0)=2*0+1=1, Fun(1)=2*1+1=2, fun(1.5)=2*1.5+1=3. 
plt.title('Fitting')
plt.xlabel('X axis')
plt.ylabel('y axis')
xp = np.linspace(Data[0,0], Data[-1,0],100)np.linspace(l,m,n): 生成一個由l到m, 中間有n個點的陣列, ex:np.linspace(0,10,100)即是產生一個[0, 0.1, 0.2, 0.3, ...., 9.9, 10]的數列 
plt.plot(Data[0:,0], Data[0:,1], '*', xp, fitFun(xp), '-')畫資料點與擬合線到同一張圖上 
plt.show() 顯示圖形