Python入门之时间序列折线图

背景提要

工作大半年,会用Python做的主要还是各种画图,一般画图网上的教程已经非常多了,但是有时候一个细微的改变就很难找到,而且很多时候,明明以前用过一次,下一次会又忘记。所以记下来一些比较常用的操作。

主要操作

因为没有系统的学习,平时画图都是用到什么学什么,什么能解决问题就直接操作,过后也不会继续深究,完全是野路子。

目前我画图主要是两种方式,根据有没有不同维度来决定。两种画图的处理方式也不完全一样,至于为啥不一样的原理以后要是知道了就再来补充。

fig,ax = plt.subplots(col,row,figsize=(x,y))

g = sns.FacetGrid(data,col,row,hue,size,aspect)

分别用这两种方式画的原始图长这样:

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(6,3))

plt.plot(test.data_date,test.ratio);

import seaborn as sns

g = sns.FacetGrid(test.sort_values(by = 'data_date'),size=3, aspect = 2)

g.map(plt.plot,'data_date','ratio',alpha=0.9)

这样就可以看出两种画图方式的不同,当然要想调整成一样的,方法1上删掉上面和右边的线条,再加上横纵坐标轴的标签就是一样的了,我更喜欢下面这个画图方式,尤其是当维度比较多的时候,画起来更方便.

1. 调整横轴显示

时间序列相关的折线图,如果每个日期都标识在横轴上就会互相重叠,像上图那样,所以有时需要时间能间隔着显示在横轴上,目前我只知道这个笨办法,手动设置x轴标记点。

ax.set_xticks([])

ax.set_xticklabels([]);

g.set_xticklabels(step=2)

2.横轴旋转

现在时间好好的显示在横轴上了,但是周期较长的时段里看起来一个日期字符串显示太长了,考虑做一个角度的旋转。

ax.set_xticklabels([],rotation=45);

g.set_xticklabels(step=2,rotation = 45)

3.绘制垂直线

弄好坐标轴之后,看线图的内容,发现折线中有1个比较大的拐点,为了更明显的看到出现拐点日期前后的差别,可以考虑绘制垂直线把不同的时期分开。

plt.vlines('2018-12-25',0, 0.15, colors = "b", linestyles = "dashed")

4.添加文本记录

之所以画时间序列折线图,主要是为了得到某个指标在某个时期由于某个改动有了什么变化。如果能标记这个时期到底做了什么改动,折线图就更一目了然了。

plt.text('2018-12-21',0.16,'2018-12-25\n大幅提升')

plt.annotate('2018-12-25\n大幅提升', \

xy=('2018-12-25',0.16),\

xytext=('2018-12-29',0.17),\

arrowprops=dict(facecolor='black', shrink=0.05))

5. 进阶 多时间维度横轴

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import matplotlib.dates as dates

#数据

idx = pd.date_range('2011-05-01', '2011-07-01')

#画布

fig, ax = plt.subplots()

ax.plot_date(idx.to_pydatetime(), s, 'v-')

#横轴(日周)

interval=1))

#网格线

# 横轴(月年)

plt.tight_layout()

plt.show()

后记

打补丁式的学习有时候既痛苦又低效,但要让自己真正捡本书来看,又很那做到,对我来说,在不理解的情况下看过的内容不实际运用也作用微小,希望这样痛苦的补丁打的时间久了,能更坚定自己系统学习的决心吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190127G0NS5Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券