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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM