背景提要
工作大半年,会用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()
后记
打补丁式的学习有时候既痛苦又低效,但要让自己真正捡本书来看,又很那做到,对我来说,在不理解的情况下看过的内容不实际运用也作用微小,希望这样痛苦的补丁打的时间久了,能更坚定自己系统学习的决心吧。
领取专属 10元无门槛券
私享最新 技术干货