chenboshi

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

 

分类:

技术点:

相关文章:

  • 2021-08-07
  • 2021-07-04
  • 2021-12-04
  • 2021-11-24
  • 2021-12-19
  • 2021-11-29
  • 2021-12-27
  • 2021-11-07
猜你喜欢
  • 2021-08-21
  • 2021-12-04
  • 2021-08-20
  • 2021-11-01
  • 2021-11-14
  • 2021-04-03
  • 2021-11-24
相关资源
相似解决方案