Pandas 如何将日期时间XTICK转换为可读格式?

Pandas 如何将日期时间XTICK转换为可读格式?,pandas,matplotlib,Pandas,Matplotlib,我正在绘制一个带有日期时间索引的时间序列。对于日志格式,绘图需要具有特定的大小。因此,由于棍子跨越多年,因此无法读取 这是一个数据示例 2013-02-10 0.7714492098202259 2013-02-11 0.7709101833765016 2013-02-12 0.7704911332770049 2013-02-13 0.7694975914173087 2013-02-14 0.7692108921323576 该数据是一个包含日期时间指数的系列,跨度为2013年

我正在绘制一个带有日期时间索引的时间序列。对于日志格式,绘图需要具有特定的大小。因此,由于棍子跨越多年,因此无法读取

这是一个数据示例

2013-02-10  0.7714492098202259
2013-02-11  0.7709101833765016
2013-02-12  0.7704911332770049
2013-02-13  0.7694975914173087
2013-02-14  0.7692108921323576
该数据是一个包含日期时间指数的系列,跨度为2013年至2016年。我用

data.plot(ax = ax)
绘制数据

如何将我的xtick格式化为像
'13
而不是
2013

根据,您可以执行以下操作

import matplotlib.dates as mdates

yearsFmt = mdates.DateFormatter("'%y")
years = mdates.YearLocator() 
ax = df.plot()
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)

全部工作如下

添加单词值,以便pd.read\u剪贴板将日期放入索引中

value
2013-02-10  0.7714492098202259
2014-02-11  0.7709101833765016
2015-02-12  0.7704911332770049
2016-02-13  0.7694975914173087
2017-02-14  0.7692108921323576
然后读入数据并转换索引

df = pd.read_clipboard(sep='\s+')
df.index = pd.to_datetime(df.index)

在日期方面,pandas和matplotlib格式化程序/定位器之间似乎存在一些不兼容。例如,参见以下问题:

我不完全清楚为什么在某些情况下使用matplotlib格式化程序仍然有效,而在其他情况下则不行。但是,由于这些问题,防弹解决方案是使用matplotlib来绘制图形,而不是使用pandas绘图功能。 这允许使用定位器和格式化程序,如中所示

这一问题的解决办法如下:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

dates = pd.date_range("2013-01-01", "2017-06-20" )
y = np.cumsum(np.random.normal(size=len(dates)))

s = pd.Series(y, index=dates)

fig, ax = plt.subplots()
ax.plot(s.index, s.values)

ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator())
yearFmt = mdates.DateFormatter("'%y")
ax.xaxis.set_major_formatter(yearFmt)

plt.show()

fy-您也可以考虑使用<代码> PLT.CluttTyLayOut.()/<代码>。这将调整并适合x标签。@AndrewL无骰子。棒仍然会碰撞。尝试了这个之后,这是在40年代的某个地方写年份。我将您的数据更改为不同的年份,这是我得到的图像。上面代码的输出是给我的,年份完全错误@Ted你能提供一个完整的工作代码来生成你显示的图吗?@ImportanceOfBeingErnest我只是把第一列放在索引中,并把它转换成一个时间戳。这可能是日期指令的问题吗?我在mac电脑上,我不知道。要找到答案,最好显示完整的代码。这可能会为这个问题提供一个可接受的解决方案。