如何在x轴设置非均匀间隔的日期?

2 投票
2 回答
4328 浏览
提问于 2025-04-17 05:31

我想用 matplotlib.dates 模块画一个时间图。根据教程,我知道怎么设置规律的日期,比如下面这样:

ax.xaxis.set_major_locator(DayLocator())
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
ax.xaxis.set_minor_...

但是在我的数据中,有些月份是缺失的。我的x轴日期更像是:一月、二月、五月、七月、九月、十月、九月……没有形成规律...

我该怎么处理这种情况呢?

2 个回答

0

从Mauro的解决方案开始,我尝试绘制日期不规则的数据对,这样我将来可以找到这个问题。

import pylab as plt
from matplotlib.ticker import FixedLocator
from matplotlib.dates import DateFormatter
import numpy as np
from datetime import datetime

# dates, irregularly spaced
y = 2010, 2010, 2010, 2011, 2011
m =    9,   11,   12,    3,    4


dates = np.array([plt.date2num(datetime(yy,mm,1)) for yy,mm in zip(y,m)])
print dates


# just some data
data = dates**2
print data


plt.plot_date(dates,data)

ax = plt.gca()
# need some more thnking for properly locate which date to label
#ax.xaxis.set_major_locator(FixedLocator(dates[[1, 10, len(dates)-1]]))
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
plt.show()

在这里输入图片描述

2

如果我理解得没错,你可能需要使用

matplotlib.ticker.FixedLocator

这个例子是在数据点1、10和最后一个位置放置标签:

import pylab as plt
from matplotlib.ticker import FixedLocator
from matplotlib.dates import DateFormatter
import numpy as np
from datetime import datetime

# dates (unequally spaced, but works exactly same for equally spaced dates too)
dates = plt.date2num(datetime(2010,3,1))  + np.array([0, 10, 50, 100, 180, 300])
# just some data
data = dates**2
plt.plot_date(dates,data)

ax = plt.gca()
ax.xaxis.set_major_locator(FixedLocator(dates[[1, 3, len(dates)-1]]))
# for some reason this is needed to get the month displayed too
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
plt.show()

撰写回答