2016-09-27 533 views
8

我正在繪製使用pandas .p​​lot()的時間序列,並且想要查看每個月顯示爲x-tick。pandas .p​​lot()x軸刻度頻率 - 如何顯示更多刻度?

這裏是集結構 data set

這裏是.plot()

enter image description here

我試圖用實例從其他崗位和matplotlib documentation和做類似的結果

ax.xaxis.set_major_locator(
    dates.MonthLocator(revenue_pivot.index, bymonthday=1,interval=1)) 

但是,刪除所有的蜱:(

我也試過通過xticks = df.index,但它沒有改變任何東西。

在x軸上顯示更多刻度的方法是什麼?

+1

你是否將日期解析爲日期時間? –

+0

@DemetriP謝謝。看起來至少是問題的一部分。現在使用ax.xaxis.set_major_locator之後,我確實看到了蜱蟲......唯一的問題是現在我每年只看到一個蜱蟲。 我明顯使用MonthLocator錯誤。 – Rotkiv

回答

2

做的正確的方式描述here 使用x_compat參數,它可以抑制自動剔分辨率調節

df.A.plot(x_compat=True)

+0

不適合我。 Python 3.6,熊貓0.19.2。任何想法爲什麼? – famargar

+0

我都不是,python 3.6和pandas 0.22 – seanysull

+1

@seanysull修復確切的信息應該很簡單。不幸的是,這個問題沒有[MCVE](https://stackoverflow.com/help/mcve),因此很難判斷你的數據幀等是否與OPs一樣(因爲OP自己回答說他們可能已經做了一些「後面的事情」那些解決問題的場景「)。我個人會問另一個問題,連接到這個解釋爲什麼這不適合你。 – DavidG

2

無需通過任何參數傳遞給MonthLocator。請確保使用x_compat撥打df.plot()每個@ Rotkiv的回答。

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

df = pd.DataFrame(np.random.rand(100,2), index=pd.date_range('1-1-2018', periods=100)) 
ax = df.plot(x_compat=True) 
ax.xaxis.set_major_locator(mdates.MonthLocator()) 
plt.show() 
1

你也可以格式化DateTimeIndex「手動」使用大熊貓Timestamp對象的屬性的熊貓的x軸蜱和標籤。

我發現,不是使用matplotlib.dates定位器,其工作的其他日期時間格式比熊貓(如果我沒有記錯的話),因此有時會表現出奇怪的行爲,如果日期沒有相應轉換容易得多。

這裏是一個通用的例子,顯示了基於Timestamp對象大熊貓的屬性每個月的第一天,作爲一個標籤:

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


# data 
dim = 8760 
idx = pd.date_range('1/1/2000 00:00:00', freq='h', periods=dim) 
df = pd.DataFrame(np.random.randn(dim, 2), index=idx) 

# select tick positions based on timestamp attribute logic. see: 
# https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timestamp.html 
positions = [p for p in df.index 
      if p.hour == 0 
      and p.is_month_start 
      and p.month in range(1, 13, 1)] 
# for date formatting, see: 
# https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior 
labels = [l.strftime('%m-%d') for l in positions] 

# plot with adjusted labels 
ax = df.plot(kind='line', grid=True) 
ax.set_xlabel('Time (h)') 
ax.set_ylabel('Foo (Bar)') 
ax.set_xticks(positions) 
ax.set_xticklabels(labels) 

plt.show() 

產量:

enter image description here

希望這有助於!