2017-07-18 97 views
0

嗨我在圖中繪製了兩條線,x軸是從'2016-04-01'到'2017的日期時間-03-31',網格線寬度顯示的值爲一個月,即30天,但我想要的網格線寬度爲50天。我的意思是我想顯示x軸的日期值是:2016-04-01,2016-05-21,2016-07-10,2016-10-18,2016-12-07,2017-01- 26,2017-03-17。python2.7:如何繪製圖中x軸網格線的值

牛逼

我的代碼如下:

import seaborn as sn 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 


sn.set_style("darkgrid") 
xfmt = mdates.DateFormatter('%Y-%m-%d') 
fig = plt.figure(figsize=(15,4)) 
ax = fig.add_subplot(111) 
ax.xaxis.set_major_formatter(xfmt) 
lst_predictions = list(predictions2) 
len_predictions = len(lst_predictions) 
plt.plot(lst_index, list(test_y2), label = 'actual') 
plt.ylim(ymin=0) 
plt.ylim(ymax=140) 
plt.xlim([lst_index[0], lst_index[-1]]) 
plt.plot(lst_index, lst_predictions, label='pred') 

plt.legend(loc="upper left") 
plt.grid(True) 
+0

這是相當難以得到電網的50天間距和讓電網的四月一號開始。既是要求? – ImportanceOfBeingErnest

+0

Apri 1st是lst_index的第一個日期,只是第一個索引是好的。是的,我想獲得50天的網格間隔。 – tktktk0711

+0

我在下面提供了一個答案,即使我不知道如何同時滿足這兩個要求。您可以選擇是否標記第一個索引,並使用每月報價或間隔50天對您更重要。 – ImportanceOfBeingErnest

回答

2

可以使用DayLocator控制刻度線的位置。

xloc = mdates.DayLocator(interval=50) 
ax.xaxis.set_major_locator(xloc) 

通常情況下,你會使用它在你想標記每月的第1和第15的情況左右。由於50天以上的時間超過一個月,因此無法按月確定位置。您仍然可以使用interval參數來爲appart的50天內的空格添加空格。然而,起點將是相當隨意的。

完整代碼:

import datetime 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

start_date = datetime.date(2016, 04, 01) 
end_date = datetime.date(2017, 07, 01) 
date_list = [ start_date + datetime.timedelta(n) for n in range(int ((end_date - start_date).days))] 

values = np.cumsum(np.random.rand(len(date_list))-.5)+20 

fig, ax = plt.subplots(figsize=(15,4)) 

ax.plot(date_list, values, label = 'actual') 

xloc = mdates.DayLocator(interval=50) 
ax.xaxis.set_major_locator(xloc) 

xfmt = mdates.DateFormatter('%Y-%m-%d') 
ax.xaxis.set_major_formatter(xfmt) 

plt.legend(loc="upper left") 
plt.grid(True) 

plt.show() 

enter image description here

+0

感謝您的工作! – tktktk0711

相關問題