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()

 

posted on 2020-08-22 10:48  chenboshi  阅读(1222)  评论(0编辑  收藏  举报

导航