利用 Matplotlib 繪製數據圖形(二)

利用 Matplotlib 繪製數據圖形(一)python

瞭解了 Matplotlib 的基本知識以後,咱們就能夠開始上手試試畫圖了。api

先從最多見的圖形開始:折線圖、條形圖、柱狀圖、散點圖、圓形圖。bash

我不得不說本 Part 實際上都是沒有什麼邏輯的語法規定,會比較無聊。不過這一 Part 又最有用,由於看完以後用 Matplotlib 繪圖就沒什麼問題了(若是你對圖形細節沒什麼要求的話~)微信

用於繪圖的數據

由於最近搞了個預測招商銀行股價的比賽,部分繪圖就直接用這個數據了。函數

import tushare as ts
pro = ts.pro_api('***********************')# *** 爲註冊 tushare 後分配的 token
cmb = pro.daily(ts_code='600036.SH', start_date='20190301', end_date='20190510')
複製代碼

動手以前,還得再多說一點

在利用 Matplotlib 繪製數據圖形(一)中我寫過:若是你想用 Matplotlib 繪圖,須要建立至少一個 fig 且其中包含一個 axes。post

fig,ax_1 = plt.subplots()
複製代碼

可是咱們又常見下面的寫法:spa

沒有手動建立 fig 和 axes 怎麼也出圖了呢? 答案是:若是調用了 plt 的繪圖方法,可是 plt 卻沒有追蹤到 fig 和/或 axes ,plt 會默認建立新的 fig 和/或 axes(Matplotlib 的兩套 API)。3d

plt 追蹤 fig 和 axes 的過程對用戶是隱形的,咱們只須要知道每次調用 plt 繪圖方法,該繪圖效果都會呈如今當前 axes 中就能夠了(後面會講如何手動變動 plt 當前 fig 和 axes)code

OK, Matplotlib

折線圖、條形圖、柱狀圖、散點圖、圓形圖分別對應着 Matplotlib 中的五個繪圖函數:plot()、bar()、hist()、scatter()、pie()。orm

plt.plot([x],y) #注意這裏的 x 實際上是可選的,但實際使用中僅傳入 y 比較少見
plt.scatter(x,y)
plt.bar(x,height) #保持和官方文檔一致,使用 height 代替 y
plt.hist(x)
plt.pie(x)
複製代碼

其中 .plot() x 可選的意思是:若是僅傳入一個位置參數的話,函數默認用戶傳入的是 y,x 則默認爲序列 [0,1,2,3,4,....]與 y 的數據一一對應。因此以前我繪製的圖形僅傳入了 'open' 一個變量是沒問題的。

不過上面的折線圖沒有什麼意義,折線圖實際中用的比較多的是時間序列,由於折線圖反應了的是先後有內在聯繫的變化。

因此不少時候折線圖 x 軸是時間,y 軸爲數據:

plt.plot('trade_date','open',data = cmb)
複製代碼

不過默認的時間軸大部分狀況下是 —— 無法用的(😓)。

Matplotlib 提供了一個專門的模塊 mdates 來處理與時間有關的問題。

其中的各類 Locator 專門用來生成時間刻度。 因此時間序列刻度自動很差用的話就手動吧23333。

代碼比較簡單,直接扔出來,看註釋:

import matplotlib.dates as mdates
months = mdates.MonthLocator() # 月 ticker
days = mdates.DayLocator() # 日 ticker
dateFmt = mdates.DateFormatter('%m-%d') 
ax = plt.gca()# 獲取當前 axes
datemin = np.datetime64('2019-03-10')# 時間軸最小值
datemax = np.datetime64('2019-05-10') + np.timedelta64(1) # 時間軸最大值
ax.set_xlim(datemin, datemax)# 設置時間軸的區間
ax.xaxis.set_major_locator(months) # 將月 ticker 設置爲主刻度
ax.xaxis.set_major_formatter(dateFmt)
ax.xaxis.set_minor_locator(days) # 將日 ticker 設置爲小刻度
plt.plot('trade_date','open',data = cmb)
plt.gcf().autofmt_xdate() #獲取當前fig 並自動調整tick label
plt.show()
複製代碼

折線圖還有一個經常使用的場景是在同一幅圖繪製多個不一樣變量的變化曲線。這怎麼作呢?

plt.plot('trade_date','close',data = cmb)
複製代碼

不切換當前 fig 和 axes ,直接繼續繪製就在同一張圖裏了。

但這種方法也很差,數據多了一行一行加麻煩。好比我想直接在一張圖裏繪製 'open',‘high','low','close' 四個變量,得加四行。

更好的辦法是把這四個變量提取出來:

ohlc = cmb.loc[:,['open','high','low','close']].values
plt.plot(cmb['trade_date'].values,ohlc)
複製代碼

Matplotlib 會自動將 y 中的每一列數據繪製稱同一條曲線。

而後你們要求又來了,四個圖顏色卻是區分了,我怎麼知道哪一個顏色表明誰呢?因此要把圖例添加上:

plt.gca().legend(['open','high','low','close'])#按照plot y 的數據順序傳入 legend 字符串就行。
複製代碼

至此,一個有實際意義且信息準確的折線圖就完工了。

本身用的話到這裏就差很少了,若是想製做爲報告中可以使用的圖,還有不少美化的工做須要進行。

Ad Time

本系列完成後我會在微信公衆號數據科學與技術(read_csv) 發佈精心製做的漸進式 notebook,但願你們能關注一下。

相關文章
相關標籤/搜索