看官网文档的时候发现给的方法十分的复杂有点不甚理解,加上比较烦躁所以改换思路,最后发现可以这样添加日期作为坐标轴标签.
首先来看这个例子:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook
from datetime import date as dt
def cal_date(datet):
year=int(datet/10000)
months=int(datet%10000/100)
days=datet%100
time=dt(year,months,days)
time=time.isoformat()
return time
def print_graph(name):
path='./data/us_covid19_daily.csv'
data=pd.read_csv(path)
date=data['date']
positive=data[name]
print(type(date))
date=date.values.tolist()
positive=positive.values.tolist()
#print(date)
date=[cal_date(x) for x in date]
date.reverse()
positive.reverse()
ind=np.arange(len(date))
plt.gcf().subplots_adjust(bottom=0.15)
plt.plot(ind,positive)
plt.xticks(ind[::40], date[::40],rotation=40)
plt.show()
print_graph('positive')
数据集是美国疫情数据绘图效果如下:
我们先需要写一个产生日期字符串的函数,这里当然有一步到位的方法,但是比较麻烦.函数的目标是将’20200122’这样格式的日期转换成图中的格式,函数如下所示:
def cal_date(datet):
year=int(datet/10000)
months=int(datet%10000/100)
days=datet%100
time=dt(year,months,days)
time=time.isoformat()
return time
过程比较简单这里不再赘述,主要是用到了datetime.
接下来直接来看我们的主题如何将这个产生的日期标上去呢?
首先调用函数将日期转换为需要的格式并放入列表:
date=[cal_date(x) for x in date]
然后有多少个日期就生成一个等大的index列表,其形式如[0,1,2…n]
ind=np.arange(len(date))
然后调用plot,但是x选择我们生成的ind.
plt.plot(ind,positive)
接下来我们设置x轴标签
plt.xticks(ind[::40], date[::40],rotation=40)
ind[::40]指间隔40天设一个标签,rotation可使标签倾斜看上去不那么挤.
如果运气好的话这么写就成了,但是我还遇到了标签显示不全的问题像这样:
标签被拦腰截断了,这个时候需要加一行:
plt.gcf().subplots_adjust(bottom=0.15)
即给底部足够的空间,这样就可以画出我们想要的图了.