python 繪製走勢圖

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

相關文章
相關標籤/搜索