Python使用pyplot绘图时设置坐标标签以日期为例

看官网文档的时候发现给的方法十分的复杂有点不甚理解,加上比较烦躁所以改换思路,最后发现可以这样添加日期作为坐标轴标签.

首先来看这个例子:

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

数据集是美国疫情数据绘图效果如下:
Python使用pyplot绘图时设置坐标标签以日期为例_第1张图片我们先需要写一个产生日期字符串的函数,这里当然有一步到位的方法,但是比较麻烦.函数的目标是将’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可使标签倾斜看上去不那么挤.
如果运气好的话这么写就成了,但是我还遇到了标签显示不全的问题像这样:
Python使用pyplot绘图时设置坐标标签以日期为例_第2张图片标签被拦腰截断了,这个时候需要加一行:

plt.gcf().subplots_adjust(bottom=0.15)

即给底部足够的空间,这样就可以画出我们想要的图了.

你可能感兴趣的:(Python,python,数据分析)