2017-06-19 86 views
1

我正在绘制日期时间索引的时间序列。情节需要是日志格式的特定大小。因此,由于它们跨越多年,所以棒不可读。如何将熊猫日期时间xticks转换为可读格式?

这里是一个数据样本

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) 

绘制数据。

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

+0

FYI-你也可以考虑使用'plt.tight_layout()'。这应该调整和适应x标签。 –

+0

@AndrewL没有骰子。棍子仍然相撞。 –

回答

1

当谈到日期时,似乎pandas和matplotlib格式器/定位器之间存在一些不兼容性。见例如这些问题:

我不完全知道为什么它仍然工作在某些情况下使用matplotlib格式化,而不是别人。但是由于这些问题,防弹解决方案是使用matplotlib绘制图形而不是熊猫绘图功能。 这允许使用定位器和格式化器,就像在matplotlib example中看到的那样。

这里解决的问题将如下所示:

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

enter image description here

0

this example,你可以这样pd.read_clipboard提出日期,指数

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 

下面做

加字值以下

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) 

enter image description here

全部工作然后读入数据并转换dex

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

尝试完成后,这是在四十年代的某个地方编写年。 –

+0

我将您的数据更改为不同的年份,这是我得到的图像。 –

+0

对于我来说,上面代码的输出是[类似这样的](https://i.stack.imgur.com/oj90e.png),完全错误的年份。 @Ted你能提供一个完整的工作代码来产生你展示的情节吗? – ImportanceOfBeingErnest