2017-06-19 164 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

相關問題