matplotlib 股票走势图 瑞幸咖啡
本文主要用折线图描绘瑞幸咖啡19年上市以来的股价走势,再利用线条颜色、标注、箭头等突出财务造假丑闻对估价的影响。
数据源:雅虎财经信息。如何获取股价信息可以看这里:https://www.cnblogs.com/chenboshi/p/13539918.html
画图思路:
1.选取收盘价和时间这两个字段,x轴为交易日,y轴为收盘价;
下载的数据集日期只有股票交易日,绘制时间轴时,不填充节假日,直接进行按照月份聚合。
2.以4月1日(财务造假丑闻爆出)作为界限,用不同颜色标记。4月1日前用深蓝色画图,因为瑞幸咖啡品牌颜色是深蓝色。4月1日后用红色。
3.添加虚横线,利用刻度对比估价涨跌幅度;
4.添加文本标注和箭头,指出导致股价暴跌的事件和时间点;
5.添加长方形阴影,再加个4月1日前后的对比。完事ヽ( ̄▽ ̄)و
代码地址 →→ github
1 import matplotlib.patches as patches 2 import matplotlib.pyplot as plt 3 import pandas as pd 4 import numpy as np 5 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 6 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 7 8 #导入数据 9 lk= pd.read_csv("C:\mypython\datasets\stock-LK.csv",encoding='utf-8') 10 11 # 自上市以来 收盘价最低、最高点 12 print(np.min(lk['Close'])) 13 print(np.max(lk['Close'])) 14 # 将时间转换成 yyyy-mm格式 15 lk['Ymnth']=lk['Date'].apply(lambda x : x[:7]) 16 17 # 以2020-04-01为界限区分财务造假新闻爆出前后的股价走势 18 before=lk[lk['Date']<'2020-04-01'] 19 after=lk[lk['Date']>='2020-04-01'] 20 21 fig, ax = plt.subplots(1,1,figsize=(16,9), dpi= 300) 22 ax.plot(before['Date'], before['Close'], color='#142975',lw=2) 23 ax.plot(after['Date'], after['Close'], color='#B00E11',lw=2) 24 25 #y轴刻度和标签设置 26 ax.set_ylim(0,55) 27 ax.set_yticklabels(labels=range(0,61,10),fontsize=14,fontweight='medium') 28 for y in range(0,55,10): 29 plt.axhline(y=y,color='gray',linestyle='--',alpha=0.3) 30 31 #日期缺失非工作日和节假日,可以选择填充,或者忽略x轴上每月总天数长度,进行聚合。此处选择后者 32 #首先按照年月分组,选取每月最小值即第一个股票交易日 作为刻度 比如 33 xticks=lk[['Date','Ymnth']].groupby(lk['Ymnth']).agg('min')['Date'].tolist() 34 ax.set_xticks(xticks) 35 #print(xticks) #['2019-05-17', '2019-06-03', '2019-07-01'...] 36 xtick_color= [ '#142975' if x <'2020-04-01' else '#B00E11' for x in xticks ] 37 38 #然后刻度标签设置为 上述列表中每个刻度的前四位 ['2014', '2015', '2016',... 39 ax.set_xticklabels([x[:7] for x in xticks ], rotation=30,fontsize=14) 40 # 根据时间分割线,设置不同的刻度标签颜色 41 [t.set_color(i) for (i,t) in zip(xtick_color,ax.xaxis.get_ticklabels())] 42 43 # 文本标注 44 box = { 45 'facecolor' : 'white', 46 'edgecolor' : 'red', 47 'boxstyle' : 'round' 48 } 49 ax.text('2020-04-15',25,"爆出财务造假丑闻",bbox=box,color='red',fontsize=20) 50 51 # 箭头指向文本 文本此物为空格. 4月1日估价为26块多 52 plt.annotate(' ', 53 ha = 'center', va = 'bottom', 54 xytext = ('2020-04-07', 26), 55 xy = ('2020-04-01', 26), 56 arrowprops = {'color':'red'}) 57 58 #给红色部分加上灰色阴影 59 start=before.shape[0] 60 offset=after.shape[0]+50 61 shape = patches.Rectangle((start,-5),offset,60,color = '#E9ECEF') 62 plt.gca().add_patch(shape) 63 64 plt.title("瑞幸咖啡历史收盘价",fontsize=26) 65 66 fig.tight_layout() 67 plt.savefig("C:\mypython\plots\stock_lk4.png") 68 69 plt.show() 70 plt.close()
作者:chenboshi
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
posted on 2020-08-22 10:48 chenboshi 阅读(1270) 评论(0) 编辑 收藏 举报