当X轴是日期时,我对plot
功能有疑问。
设置
我有两个时间序列dt
和x
,其中dt
是datetime.datetime
值列表,x
是numpy
数组对象。
dt =
[datetime.datetime(1996, 12, 3, 0, 0),
datetime.datetime(1996, 12, 4, 0, 0),
...,
datetime.datetime(2015, 6, 5, 0, 0),
datetime.datetime(2015, 6, 8, 0, 0)]
x =
array([29.06262, 29.26933, ..., 208.41999, 208.44532])
两者都有相同的长度。
当我将它们绘制为:
ax.plot(dt, x, color='black', lw=2)
我得到的图表中有X-Tick标签作为年份(例如1994, 1998, 2002, 2006, 2010, 2014
)。
在一些缩放之后,X-Tick标签很好地开始显示月份(例如Aug 2009, Oct 2009, Dec 2009, Feb 2010, Apr 2010, Jun 2010
)。
进一步缩放后,X-Tick标签再次很好地开始显示日期(例如Jan 14 2010, Jan 21 2010, Jan 28 2010, Feb 04 2010, Feb 11 2010, Feb 18 2010
)。
问题
现在,我正在尝试绘制自定义图表(例如,使用LineCollection
),而不是使用默认的plot
。
我怀疑我需要使用ax.xaxis.set_major_locator(???)
和ax.xaxis.set_major_formatter(???)
来获取与默认plot
函数中相同的X轴功能。
我需要向???
和ax.xaxis.set_major_locator(???)
提供什么(例如ax.xaxis.set_major_formatter(???)
)?
答案 0 :(得分:0)
是的,您的假设是正确的:您必须手动设置定位器和格式化程序。 “常规”版本可在matplotlib.ticker
中找到,而matplotlib.dates
中的日期则与plot
中的日期相关。有很多固定的(例如WeekdayLocator,MicrosecondLocator等),但也有使用import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# all your fancy plotting code
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter())
plt.show()
时自动获得的。
所以这应该这样做:
plot
进一步阅读:http://matplotlib.org/api/dates_api.html
请注意日期时间列表:matplotlib具有内部日期/时间表示(浮动天数),因此在绘图之前需要转换日期时间对象。在echo "<a class='fancybox-thumbs' data-fancybox-group='thumb' rel='gallery-{$gallery}' title='{$title}' href='{$img}'><img src='{$img}' /></a>";
这种转换会自动发生,对于自定义图表,您可能必须自己使用matplotlib.dates.date2num
进行转换。