1.工具html
matplotlibgit
numpygithub
2.matplotlib使用數組
import matplotlib.pyplot as plt #plt用於顯示圖片
import matplotlib.image as mping #mping用於讀取圖片
import datetime as dt
import matplotlib.dates as mdates
from pylab import *
def draw_trend_chart(dates,y):
mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默認字體
mpl.rcParams['axes.unicode_minus'] = False #解決保存圖像是負號'-'顯示爲方塊的問題
x = [dt.datetime.strptime(d,'%Y/%m/%d').date() for d in dates]
#plt.figure(figsize=(8,8))
plt.figure()
#plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
#plt.gca().xaxis.set_major_locator(mdates.DayLocator())
#plt.plot(x,y,"r--",linewidth=2)
plt.plot(x,y,"r",linewidth=1)
#plt.gcf().autofmt_xdate()
#plt.xlabel("DATE") #x軸標籤
plt.ylabel("WEIGHT") #y軸標籤
plt.title("MY HEALTH TRACKING")#標題
plt.savefig("liuyang.png") #保存圖片名稱
lena = mping.imread('liuyang.png') #讀取圖片文件信息
lena.shape #(512,512,3)
plt.imshow(lena) #顯示圖片
plt.axis('off') #不顯示座標軸
plt.title("")
plt.show() #顯示
def get_weight_data(filename):
time = []
weight = []
fileContent=open(filename,"r")
for eachline in fileContent:
eachData = eachline.strip('\n').split(",")
if eachData[-1].strip() =='':
continue
else:
time.append(eachData[0])
weight.append(eachData[1])
return [time, weight]
data = get_weight_data("data.csv")
draw_trend_chart(data[0],data[1])app
3.numpy工具
.numpy數組
numpy是經常使用的數據處理庫,我將000001.SZ的股價數據(時間範圍從20150101到20150930)導入到csv中,而後經過numpy讀取獲得日期和價格數組。csv文件中包含了兩列,日期和價格,分割符號爲",",讀取過程代碼以下:字體
dates, close = np.loadtxt(filename,delimiter=",", unpack= True, converters={0:mdates.strpdate2num('%Y-%m-%d')})
numpy的loadtxt方法:設定了文件中的分隔符號爲「,」,unpack是否將數組拆分,True爲拆分,即:獲得兩個數組分別表示日期和收盤價格,converters是將日期類型的字符串轉爲數組,由於numpy規定其數組中的類型須要一致。
2.繪製基礎走勢圖
經過numpy獲得日期和收盤價格以後,參照先前的示例,經過plot方法進行繪製:code
ax1.plot(dates,close)
圖表以下所示:
orm
在上圖中,x軸經過數值標識,而不是日期類型。由於咱們經過numpy構造數組時,日期按照數值類型存儲,能夠經過以下方法轉換爲日期類型:htm
ax1.xaxis.set_major_locator(mdates.DayLocator(bymonthday=range(1,32), interval=15)) ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) for label in ax1.xaxis.get_ticklabels(): label.set_rotation(45)
X-軸設置主要刻度locator爲每日刻度,格式爲:DateFormatter("%Y-%m-%d"),每日刻度從第1日到第31日,間隔爲15日。圖表以下所示:
其中,對於X-軸上面的每一個ticker標籤都向右傾斜45度,這樣標籤不會重疊在一塊兒便於查看。
也能夠按照每個月進行顯示,X-軸設置主要刻度爲每個月刻度,格式爲:DateFormatter("%Y-%m"),轉換代碼以下:
ax1.xaxis.set_major_locator(mdates.MonthLocator()) ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))
圖表以下所示:
3.圖形邊框調整
細心的讀者可能會發現,在上圖中底部(bottom)處的日期標籤,顯示不完整。此時能夠點擊【configure subplots】按鈕,調整左右和上下邊框,而後保存便可。圖表以下所示:
也能夠經過subplots_adjust方法對於邊框進行調整:
plt.subplots_adjust(bottom=0.13,top=0.95)
4.繪製價格平均線
在前面的示例中繪製了基本的股票走勢圖,本節咱們利用ta-lib【4】證券技術指標庫,繪製5日和10日價格平均線。
ta-lib中提供了方法talib.SMA獲得價格簡單平均線,timeperiod爲時間參數,timeperiod=5爲五日均線,基於上圖增長五日和十日均線,代碼以下:
sma5 = talib.SMA(close, timeperiod = 5) ax1.plot(dates,sma5) sma10 = talib.SMA(close, timeperiod = 10) ax1.plot(dates,sma10)
其中,sma5和sma10均爲numpy數組。
圖表以下所示:
在座標軸中有三條曲線,matplotlib會自動改變線條顏色,此時若是沒有說明並不方便使用,能夠在右上角增長圖例,代表各線條所表明的含義,並增長圖表的網格效果,代碼以下:
plt.legend(('daily', 'SMA5', 'SMA10')) plt.grid(True)
圖表以下所示:
4.http://www.cnblogs.com/bradleon/p/6832867.html