Matplotlib 畫圖工具
figure and subplot
所有的圖資訊都是在figure 物件中,figure 就像是畫布一樣,因此畫圖前必須先呼叫。subplot 是在figure 上定義有幾張圖表,如果沒有呼叫subplot,就是只有一張圖:
figure 範例:
from matplotlib import pylab as plt
plt.figure(figsize=(6,6))
plt.title('test')
plt.show()
subplot 範例:
from matplotlib import pylab as plt
plt.figure(figsize=(9,6))
plt.subplot(2,3,1)
plt.title('1')
plt.subplot(2,3,2)
plt.title('2')
plt.subplot(2,3,3)
plt.title('3')
plt.subplot(2,3,5)
plt.title('5')
plt.show()
subplot 第1,2個參數定義figure x,y方向要切出幾個圖。範例為y方向切2塊,x方向切3塊 總共6塊小圖。第3個參數為指定那一個小圖,數字不能超過x*y,順序由左上往右下。
定義figure & subplot 後,就可以再圖上畫上資訊了
Plot 折線圖 or 散佈圖
from matplotlib import pylab as plt plt.figure(figsize=(12,8)) plt.subplot(2,2,1) plt.plot([0,1,2,3,4,5],[4,6,3,1,9,6],'ko-') plt.subplot(2,2,2) plt.plot([0,1,2,3,4,5],[4,6,3,1,9,6],'ro--') plt.subplot(2,2,3) plt.plot([0,1,2,3,4,5],[4,6,3,1,9,6],'bo') plt.show()
plot function 第1,2 參數是x軸數據及y軸數據。第3個參數是資料點的"顏色" , "標記樣式" , "線條樣式"。例如 "ko-" k代表黑色、圓標記點 、實心直線 ,"bo" 為藍色圓點無線。
hist 長條圖
from matplotlib import pylab as plt import numpy as np plt.figure() plt.hist(np.random.randn(1000),range = (-2,2),bins=10,alpha=0.5) plt.show()
hist 第1個參數是輸入資料(一維格式)。畫出來的圖 x軸數據大小,y軸該大小出現的次數。
range 為x軸顯示範圍。bins 圖上要分成幾根長條圖,數字愈大分越細。alpha 為透明程度,數字愈小愈透明。
Scatter 散佈圖
from matplotlib import pylab
import numpy as np
import random
batch = np.ndarray(shape=(10,2), dtype=np.int32)
for i in range(10):
batch[i,0]= random.randint(0, 20)
batch[i,1]= random.randint(0, 20)
string = "1 2 3 4 5 6 7 8 9 10"
name = string.split()
pylab.figure(figsize=(10,5)) #figsize=(width,height) by inch
for i, label in enumerate(name):
x,y=batch[i,:]
pylab.scatter(x,y) #plot scatter point
pylab.annotate(label, xy=(x, y), xytext=(5, 2), textcoords='offset points',ha='right', va='bottom') #label on each point
pylab.show()
pylab.figure(figsize=(10,5)) : 決定圖的大小
pylab.scatter(x,y) : 將點以x,y座標畫在圖上
pylab.annotate : 將文字映在圖上
label :為映的文字
xy :文字的座標
xytext : 文字對xy座標的平移量,數字愈大移的愈遠
va : 有'center' 'left' 'right' 三種選擇,意思是選擇用文字方塊的 中間/左邊/右邊對齊xy座標點
ha: 有 'center' 'top' 'bottom' 'baseline,意思也是用文字方塊的上/中/下緣對齊座標,
baseline 目前不知用處為何




