首页 > 技术文章 > python与excel时间戳转换+plt添加特殊点的水平、垂直辅助线

lhjc 2021-03-31 16:12 原文

import pandas as pd
import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt
import time

vacc = pd.read_excel(r'C:\Users\...\Desktop\vacc.xlsx')
reg=linear_model.LinearRegression(fit_intercept=True,normalize=False)

x = np.array([i for i in vacc.date]).reshape(-1,1)
y = [i for i in vacc.amount]

reg.fit(x,y)
k=reg.coef_#获取斜率w1,w2,w3,...,wn
b=reg.intercept_#获取截距w0

#excel1天时间戳(1970年1月1日开始)转python秒时间戳(1900年1月1日)
xt = [time.localtime((i - 25569.3)*86400) for i in x]
xt = [time.strftime("%y/%m/%d", i) for i in xt]

#设置x0方便绘制x轴,同时用于绘制线性曲线
x0=np.arange(44270,44270+30*8,15)
y0=k*x0+b

x0t = [time.localtime((i - 25569.3)*86400) for i in x0]
x0t = [time.strftime("%y-%m-%d",i) for i in x0t]

#(x1,y1)为特殊点
x1 = 44466
y1 = k*x1 + b
x1t = time.strftime("%y-%m-%d",time.localtime((x1 - 25569.3)*86400))

plt.scatter(x,y)
plt.plot(x0,y0)
plt.scatter(x1,y1,s=60,color = 'g')
plt.margins(y=0,x=0)
#plot 前为x坐标向量,后为y坐标向量
plt.plot([x1,x1],[y1,0],'k--',linewidth = 2)
#不能用此方法继续添加y辅助线,原因未知
#plt.plot([x1,0],[y1,y1],'k--',linewidth = 2)
plt.axhline(y=y1,xmin=0,xmax=0.87,color='black',linewidth = 2,linestyle='--')

# xytext 为注解内容位置坐标,当该值为None时,注解内容放置在xy处
plt.annotate(r"$(21/9/27,105098)$",xy=(x1,y1),xycoords='data',xytext=(-90,+20),
                 textcoords='offset points',
                 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=0"),
                 fontsize = 18)

plt.xticks(x0,x0t,rotation = 60,fontsize =18)
plt.yticks(fontsize =18)

推荐阅读