您好我在图中绘制了两条线,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。
Ť
我的代码如下:
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 :(得分:2)
您可以使用DayLocator
来控制刻度线的位置。
xloc = mdates.DayLocator(interval=50)
ax.xaxis.set_major_locator(xloc)
通常你会在你想要标记每个月的第1和第15个的情况下使用它。由于50天超过一个月,因此无法确定一个月的位置。您仍然可以使用interval参数来区分50天appart的刻度。然而,出发点将是相当随意的。
完整代码:
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()