2016年10月22日 星期六

OPENCV(3)--Matplotlib pyplot bassic function


    這篇簡單的介紹Matplotlib的基本用法,主要可以用來秀圖特別是可以畫出函數或是矩陣元素圖形,以利我們做數學上的分析,他的功能類似於有名的Matlab軟體.

底下分別畫出三種圖.



第一個放置在最左邊,單純任意輸入一維陣列
y=[1,3,5,7,9,12,16,22]     #隨便輸入幾個數字
x=[0,1,2,3,4,5,6,7]           #X 軸序號
那利用plt.plot 即可畫出該圖,也就是我可以從圖視覺畫的看出y陣列分布的狀況
至於'ro' 參數,r 代表紅色o 代表畫出圓點,
plt.plot(x,y,'ro')
而底下另一方式'b-',b 代表藍色,-代表線段
plt.plot(x,y,'b-', linewidth=3.0)
除了o,-可以使用外
('o', 'v', '^', '<', '>', '8', 's', 'p', '*', 'h', 'H', 'D', 'd')   都是可以使用的特定符號
x,y則分別是輸入的x陣列及y陣列
linewidth=3.0  可以指定線寬,數字越大線越粗



plt.axis([0, 10, 0, 24]) #分別設定X,Y軸的最小最大值
表示X軸為0-10,Y軸為0-24
plt.title('some number')                 #標示圖片title
plt.ylabel('Y some numbers')   #標示圖片Y軸文字
plt.xlabel('X auto numbers') #標示圖片X軸文字

中間第二個圖為一函數圖形
x0 = np.arange(0., 5., 0.2)  #產生一矩陣  from 0.0~4.8 每次加0.2
使用print(x0)  即可在命令視窗看出產的x0矩陣的值
分別畫出F(x0)=x0 ,F(x0)=x0*x0 (平方),F(x0)=x0*x0*x0 (立方) 三個函數
且分別用不同顏色及記號畫在同一張圖上,使用下面這程式完成
plt.plot(x0, x0, 'r--', x0, x0**2, 'bs', x0, x0**3, 'g^',linewidth=2.0)
#紅色線寬可以改成2.0或其他數值

右邊第三章的圖為一直方圖
#任一產生一隨機矩陣x
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
利用plt.hist畫出,x為輸入的矩陣,第二個參數設50表示把X軸設成50組間距顯示
改成10則只會分成10組間距顯示,而設成normed=True,成會把Y軸正規化成0-1之間.
facecolor='g' 顏色設為綠色.alpha設成0.75
n, bins, patches = plt.hist(x, 50, normed=True, facecolor='g', alpha=0.75)

使用plt.text可以在圖上標示文字,如底下也可以標示特殊數學符號
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.grid(True) 可以打開格線

最後使用plt.subplot(1,3,index) 可以如下圖,在一列上分成3格欄位,從左到右,index分別為1,2,3
另外例如 plt.subplot(2,3,index) 就表示可以放2x3=6 總共6張圖 ,index 從1,2...6.

<範例程式>

import matplotlib.pyplot as plt
import cv2
import numpy as np
#==左圖==============================
y=[1,3,5,7,9,12,16,22]     #隨便輸入幾個數字
x=[0,1,2,3,4,5,6,7]           #X 軸序號

##畫出X及Y  ,ro :紅色的點  b-:藍色的線段 
plt.subplot(1,3,1)              #把show圖一列分成3欄,放在第1個位置也就是右邊
plt.plot(x,y,'ro')
#plt.plot(x, y, linewidth=5.0)
plt.plot(x,y,'b-', linewidth=3.0)
##X min=0 ~,max=10  ,Y axis min=0 ~max=24
plt.axis([0, 10, 0, 24])  #分別設定X,Y軸的最小最大值
plt.title('some number') #標示圖片title
plt.ylabel('Y some numbers') #標示圖片Y軸文字
plt.xlabel('X auto numbers')  #標示圖片X軸文字

#==中圖==============================
x0 = np.arange(0., 5., 0.2)  #產生一矩陣  from 0.0~5.0 每次加0.2
print("x0=",x0)
plt.subplot(1,3,2)    #把show圖一列分成3欄,放在第2個位置也就是中間
# 'r--' :red dashes, 'bs': blue squares and  'g^':green triangles
#將三個函數圖畫在一起,分別用不同的記號及顏色
#filled_markers = ('o', 'v', '^', '<', '>', '8', 's', 'p', '*', 'h', 'H', 'D', 'd')   都是可以使用的特定符號
plt.plot(x0, x0, 'r--', x0, x0**2, 'bs', x0, x0**3, 'g^',linewidth=2.0)  #紅色線寬可以改成2.0或其他數值
##X min=0 ~,max=10  ,Y axis min=0 ~max=24
plt.axis([0.0, 5.0, 0, 120])     #分別設定X,Y軸的最小最大值
plt.title('Red:X0   Blue:X0^2   Green:X0^3')
plt.ylabel('f(x0)')
plt.xlabel('X0')

#==右圖==============================
#任一產生一隨機矩陣x
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
print("x=",x)
plt.subplot(1,3,3) #把show圖一列分成3欄,放在第2個位置也就是右邊
# the histogram of the data
#畫出直方圖
n, bins, patches = plt.hist(x, 50, normed=True, 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()

加入阿布拉機的3D列印與機器人的FB專頁
https://www.facebook.com/arbu00/


Scan QRcode to join FB Fans.