绘制K线图
案例:使用matplotlib绘制K线图
绘制dates与收盘价的折线图:
import numpy as np import datetime as dt import matplotlib.pyplot as mp import matplotlib.dates as md # 绘制k线图,x为日期 mp.figure('APPL K', facecolor='lightgray') mp.title('APPL K') mp.xlabel('Day', fontsize=12) mp.ylabel('Price', fontsize=12) #拿到坐标轴 ax = mp.gca() #设置主刻度定位器为周定位器(每周一显示主刻度文本) ax.xaxis.set_major_locator( md.WeekdayLocator(byweekday=md.MO) ) ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y')) #设置次刻度定位器为日定位器 ax.xaxis.set_minor_locator(md.DayLocator()) mp.tick_params(labelsize=8) dates = dates.astype(md.datetime.datetime) mp.plot(dates, opening_prices, color='dodgerblue', linestyle='-') mp.gcf().autofmt_xdate() mp.show()
绘制每一天的蜡烛图:
#绘制每一天的蜡烛图 #填充色:涨为白色,跌为绿色 rise = closeing_prices >= opening_prices color = np.array([('white' if x else 'limegreen') for x in rise]) #边框色:涨为红色,跌为绿色 edgecolor = np.array([('red' if x else 'limegreen') for x in rise]) #绘制线条 mp.bar(dates, highest_prices - lowest_prices, 0.1, lowest_prices, color=edgecolor) #绘制方块 mp.bar(dates, closeing_prices - opening_prices, 0.8, opening_prices, color=color, edgecolor=edgecolor)
# 绘制K线图 import numpy as np import matplotlib.pyplot as mp import datetime as dt import matplotlib.dates as md def dmy2ymd(dmy): """ 把日月年转年月日 :param day: :return: """ dmy = str(dmy, encoding='utf-8') t = dt.datetime.strptime(dmy, '%d-%m-%Y') s = t.date().strftime('%Y-%m-%d') return s dates, opening_prices, \ highest_prices, lowest_prices, \ closing_prices = \ np.loadtxt('aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True, dtype='M8[D],f8,f8,f8,f8', converters={1: dmy2ymd}) # 日月年转年月日 print(dates) # 绘制收盘价的折现图 mp.figure('APPL', facecolor='lightgray') mp.title('APPL', fontsize=18) mp.xlabel('Date', fontsize=14) mp.ylabel('Price', fontsize=14) mp.grid(linestyle=":") # 设置刻度定位器 # 每周一一个主刻度,一天一个次刻度 ax = mp.gca() ma_loc = md.WeekdayLocator(byweekday=md.MO) ax.xaxis.set_major_locator(ma_loc) ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d')) ax.xaxis.set_minor_locator(md.DayLocator()) # 修改dates的dtype为md.datetime.datetiem dates = dates.astype(md.datetime.datetime) mp.plot(dates, closing_prices, color='dodgerblue', linewidth=2, linestyle='--', alpha=0.8, label='APPL Closing Price') #整理颜色 rise = closing_prices>opening_prices ecolor = np.array(['red' if x else 'green' for x in rise]) color = np.array(['white' if x else 'green' for x in rise]) # for x in rise: # if x : # ecolor = np.array('red') # else: # ecolor = np.array('green') #绘制实体 mp.bar(dates,opening_prices-closing_prices,0.8,opening_prices, edgecolor=ecolor,color=color,zorder=3) #绘制影线 mp.vlines(dates,lowest_prices,highest_prices,color=ecolor) mp.gcf().autofmt_xdate() mp.show()