Python-pandas数据框线图在xaxis上显示日期

发布于 2021-02-02 23:14:57

比较以下代码:

test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()

我最后添加DateFormatter

test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()
ax.xaxis.set_minor_formatter(dates.DateFormatter('%d\n\n%a')) ## Added this line

与第二张图的问题是,它开始于5-24代替5-25。另外,5-252017年的星期四不是星期一。是什么原因引起的?这个时区相关吗?(我也不明白为什么日期数字会彼此叠加)

关注者
0
被浏览
90
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    通常,pandas和matplotlib的datetime实用程序不兼容。因此,matplotlib.dates在大多数情况下,尝试在使用熊猫创建的日期轴上使用对象会失败。

    原因之一是例如从文档中看到的

    datetime对象将转换为浮点数,该浮点数表示自0001-01-01 UTC以来的天数(加1)。例如,0001-01-01、06:00是1.25,而不是0.25。

    但是,这不是唯一的区别,因此建议在日期时间对象中不要混合使用熊猫和matplotlib。

    但是,可以选择告诉熊猫不要使用其自己的日期时间格式。在这种情况下,可以使用matplotlib.dates股票行情。这可以通过操纵。

    df.plot(x_compat=True)
    

    由于熊猫不提供复杂的日期格式化功能,因此可以使用matplotlib进行绘图和格式化。

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.dates as dates
    
    df = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
    df['date'] = pd.to_datetime(df['date'])
    
    usePandas=True
    #Either use pandas
    if usePandas:
        df = df.set_index('date')
        df.plot(x_compat=True)
        plt.gca().xaxis.set_major_locator(dates.DayLocator())
        plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
        plt.gca().invert_xaxis()
        plt.gcf().autofmt_xdate(rotation=0, ha="center")
    # or use matplotlib
    else:
        plt.plot(df["date"], df["ratio1"])
        plt.gca().xaxis.set_major_locator(dates.DayLocator())
        plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
        plt.gca().invert_xaxis()
    
    plt.show()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看