背景:
用python的matplotlib的api画沪深300在2017年的走势图,并且标识出全年最低价及国庆节。(数据来源:天软科技)
代码
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
"""
数据格式(2017沪深300.CSV):
date HS300
2017/1/3 3342.2272
2017/1/4 3368.3117
2017/1/5 3367.7892
………………
"""
filepath = 'C:\\Users\\tinysoft\\Desktop\\2017沪深300.CSV'
data = pd.read_csv(filepath,index_col=0,parse_dates = True)
hs300 = data['HS300']
fig = plt.figure()
ax = fig.add_subplot(111)
hs300.plot(ax=ax,style='r')
"""
设置标注:
日期
备注文本
颜色
"""
day_label = [
(datetime(2017,10,1),'National Day','r'),#国庆节
(hs300.idxmin(),"min",'g') #2017年最低
]
for day,text,color in day_label:
label = "{0}\n{1}\n{2}".format(day.date(),hs300.asof(day),text)
ax.annotate(label,
xy = (day,hs300.asof(day)+10),#数据位置
xytext = (day,hs300.asof(day)+150),#字体位置
arrowprops = dict(facecolor=color),#箭头颜色
horizontalalignment='left',#水平对齐方式
verticalalignment='top')#垂直对齐方式
ax.set_xlim([datetime(2017,1,1),datetime(2017,12,31)])
ax.set_ylabel('$Close$')
ax.set_xlabel('$SH000300$')
ax.set_title('$In\ 2017, the\ SH000300\ charts$')
plt.show()