iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
AI & Data

python 入門到分析股市系列 第 16

[Day16]視覺化資料 - Matplotlib - legend、subplot、GridSpec、annotate

導讀

前言

今天是鐵人賽的第16天,持續focus on 圖表的部分,今天的重點放在如何讓圖表更加符合自己想要的樣式。

  • legend()
    前一天的圖表都只有顯示數據的圖形,可是沒有顯示數據的名稱,當今天有兩種數據,可以使用ax.legend()來顯示數據的名稱,名稱定義在label中
    語法:legend(*args)
    其中一個args為loc,主要是設定顯示的位置
描述 數字
best 最適宜 0
upper right 右上角 1
upper left 左上角 2
lower right 右下角 3
lower left 左下角 4
right 右側 5
center left 左側中間 6
center right 右側中間 7
lower center 下方中間 8
upper center 上方中間 9
center 最適宜 10
import matplotlib.pyplot as plt
import numpy as np


plt.style.use('classic')
%matplotlib inline

ironman = np.linspace(0,10, 1000)  #產生 0~10區間的 等間隔序列
fig , ax = plt.subplots()
plt.plot(ironman, np.sin(ironman), '.', color='SteelBlue', label='Sine')
plt.plot(ironman, np.cos(ironman), '-', color='RosyBrown', label='Cosine')
ax.axis('equal')
leg = ax.legend(loc='upper right', shadow=True) 
# loc->名稱放在圖表的右上角 frameon->名稱是否用框框 shadow->是否有陰影...

https://ithelp.ithome.com.tw/upload/images/20181016/20111390JPIvxA6s6K.png

  • subplot()
    子圖表:當同樣的資料想要用不同的視角呈現時即可使用子圖表。
    以下範例示範在標準的axes中顯示另外一個自己定義的axes。語法: plt.axes([bottom, left, width, height])
fig , ax = plt.subplots()
axe_base = plt.axes()
axe_small = plt.axes([0.65, 0.65, 0.2, 0.2])

https://ithelp.ithome.com.tw/upload/images/20181016/201113908bnoV6y7na.png

接下來示範繪製多個子圖

fig , ax = plt.subplots()
fig.subplots_adjust(hspace=0.4, wspace=0.4) #設定子圖的間隔
for i in range(1,7):
    plt.subplot(2, 3, i)
    plt.text(0.5, 0.5, str((2, 3, i)), fontsize=18, ha='center')

https://ithelp.ithome.com.tw/upload/images/20181016/20111390EGdCZj8RDK.png

  • subplots()
    一次準備好多個網格
fig , ax = plt.subplots(2, 3, sharex=True, sharey=True)
# sharex->是否共享x軸  sharey->是否共享y軸
for i in range(2):
    for j in range(3):
        ax[i, j].text(0.5, 0.5, str((i, j)), fontsize=18, ha='center')
        #在各個子網格寫上文字

https://ithelp.ithome.com.tw/upload/images/20181016/20111390584qslAfeP.png

  • GridSpec()
    繪製更複雜的網格
ironman_grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
print(ironman_grid)
plt.subplot(ironman_grid[:,0]) #all row, 0 column
plt.subplot(ironman_grid[0, 1:]) #0 row, 1之後的所有column
plt.subplot(ironman_grid[1, 1]) #1 row, 1 column
plt.subplot(ironman_grid[1, 2]) #1 row, 2 column

https://ithelp.ithome.com.tw/upload/images/20181016/20111390OwBbcH7r5U.png

  • annotate()
    當想要在圖表上特別標示某個數據時,可以使用annotate將會特別顯示箭頭和文字
ironman = np.linspace(0,10, 1000)  #產生 0~10區間的 等間隔序列
fig , ax = plt.subplots()
plt.plot(ironman, np.sin(ironman), '.', color='SteelBlue', label='Sine')
plt.plot(ironman, np.cos(ironman), '-', color='RosyBrown', label='Cosine')
ax.axis('equal')
leg = ax.legend(loc='upper right', shadow=True) 
ax.annotate(s="first node", xy=(4.44,-1), xytext=(5,-2), 
            arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
# s->標示的文字內容, xy->要標示的數據位置, xytext->顯示的文字位置,arrowprops->箭頭的參數
ax.annotate(s="second node", xy=(8,1), xytext=(5,1.5), 
            arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=-.2"))

https://ithelp.ithome.com.tw/upload/images/20181017/20111390hNWMraFLmd.png


上一篇
[Day15]視覺化資料 - Matplotlib - 折線圖、座標、直方圖、圓餅圖
下一篇
[Day17]視覺化資料 - Matplotlib - 加上中文字、柱狀圖、boxplot
系列文
python 入門到分析股市30

尚未有邦友留言

立即登入留言