matplotlib - 我应该使用什么样的set_major_locator

时间:2015-06-10 16:36:50

标签: python matplotlib

当X轴是日期时,我对plot功能有疑问。

设置

我有两个时间序列dtx,其中dtdatetime.datetime值列表,xnumpy数组对象。

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(???))?

1 个答案:

答案 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进行转换。