程式語言-看盤版面(上)-圖框教學
難易程度★★
此篇文章使用 Anaconda的 Jupyter寫程式,測試環境 python3.6,事先完成 matplotlib、numpy套件安裝
本篇用 matplotlib套件裡不同方法繪製圖框
前幾篇的程式畫出來的圖都是線條來呈現,如下圖
但實際上我們在看盤的時候其實都是看蠟燭圖(candlesticks)
也就是每天的『開盤價』(open)、『收盤價』(close)、『最低值』(low)、『最高值』(high)
有時也會參考一些技術指標,例如「KD值」(kd)及「成交量」(volume)
不過今天要先從基礎圖框練習,為此,版主還真的專研了一陣子
介紹套件
matplotlib是Python及NumPy的可視化操作界面, pyplot是matplotlib裡的一個模塊
今天我們要深入到用pyplot裡的`figure物件,裡面有兩種繪圖的方法
- figure.add_subplot()
- fig.add_axes()
add_axes和add_subplot有什麼區別?
此連結有清楚的解釋兩者些許的差異,不過下面程式也會解說
程式解析
- 導入教學所需的套件
#導入繪圖套件
import numpy as np
import matplotlib.pyplot as plt
2. 繪製初始圖框,記得要plot(繪製)及show(顯示)
#繪製初始圖框
plt.figure(figsize=(24,8), dpi=72,
facecolor=”white”,edgecolor=”green”)
plt.plot()
plt.show()
3. 使用add_subplot繪製圖框,這裡切了2x3共6塊,只顯示第1、2、5、6塊
參數:add_subplot(上下切幾塊,左右切幾塊,左上到右下第幾塊)
#建立初始圖框
fig = plt.figure(figsize=(16,8))#在fig圖裡可以切塊
ax = fig.add_subplot(2, 3, 1)
ax2 = fig.add_subplot(2, 3, 2)
ax3 = fig.add_subplot(2, 3, 5)
ax4 = fig.add_subplot(2, 3, 6)
plt.show()
4. 設定座標範圍及座標數,這裡將x座標範圍(set_xlim)設1~10.1,標籤(set_xticks)設定1~10,標籤間距為1
注意:set_xtick的範圍尾數要+1
#設定座標範圍及座標數
fig = plt.figure(figsize=(16,8))
ax = fig.add_subplot(1, 1, 1)
ax.set_xlim(1,10.1) ##設定x軸範圍
ax.set_xticks(range(1,11,1)) ##設定x軸標籤
ax.set_ylim(-8.5,11)
ax.set_yticks(range(-8,11,2))
plt.show()
5. 設定標籤顯示資料(set_xticklabels),放入文字a~j,可以自行調整字體大小(fontsize)及旋轉角度(rotation)
#設定標籤顯示資料
fig = plt.figure(figsize=(16,8))
ax = fig.add_subplot(1, 1, 1)
ax.set_xlim(1,10.1)
ax.set_xticks(range(1,11,1))##設定x軸標籤文字,旋轉90度ax.set_xticklabels(list(“abcdefghij”),fontsize=20,rotation=90)
ax.set_ylim(-8.5,11)
ax.set_yticks(range(-8,11,2))
ax.set_yticklabels(list(“abcdefghij”),fontsize=30,rotation=45)
plt.show()
6. 練習在裡面畫sin的圖形。因為有x、y參數,記得使用plt.plot(x, y)
#練習繪圖
fig = plt.figure(figsize=(16,8))
ax = fig.add_subplot(2, 1, 1)
ax.set_xlim(1,10.1)
ax.set_xticks(range(1,11,1))
ax.set_xticklabels(list(“abcdefghij”),fontsize=20,rotation=90)
ax.set_ylim(-8.5,11)
ax.set_yticks(range(-8,11,2))
x = np.arange(0.0, 10.0, 0.01)
y = 5*np.sin(2*np.pi*x)
plt.plot(x, y)
plt.show()
休息一下
7. 使用add_axes繪製圖框,圖框的位置是自己定義的,兩個圖塊可以重疊
參數:add_axes( x初始座標, y初始座標, 寬, 高 )
#建立初始圖框
fig = plt.figure(figsize=(24, 15))#在fig圖裡可以堆疊,自訂放置位置
ax = fig.add_axes([0,0.3,1,0.5])
ax2 = fig.add_axes([0,0.1,1,0.2])
ax3 = fig.add_axes([0,0,1,0.1])
plt.show()
8. 比照上面練習繪圖,每一個圖塊都畫sin函數
注意:一般會習慣將座標文字放在最後一個圖塊
#練習繪圖
fig = plt.figure(figsize=(24, 15))
ax = fig.add_axes([0,0.3,1,0.5])
ax2 = fig.add_axes([0,0.1,1,0.2])
ax3 = fig.add_axes([0,0,1,0.1])
ax3.set_xlim(1,10.1)
ax3.set_xticks(range(1,11,1))
ax3.set_xticklabels(list(“abcdefghij”),fontsize=20,rotation=90)
x = np.arange(0.0, 10.0, 0.01)
y = 5*np.sin(2*np.pi*x)
ax.plot(x,y)
ax2.plot(x,y)
ax3.plot(x,y)
plt.show()
附上原始程式碼
這次的教學教了
- 了解matplotlib套件模塊
- 學習使用add_subplot及add_axes方法
- 了解add_subplot及add_axes參數內容
- 學習使用set_xlim、set_xticks及set_xticklabels方法
- 了解set_xlim、set_xticks及set_xticklabels參數內容
- 成功繪製圖框及標題設定