2017-07-18 101 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

相关问题