matplotlib 我应该使用哪种set_major_locator?

fumotvh3  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(151)

我有一个关于plot功能的问题,当X轴是一个日期。

    • 设置**

我有两个时间序列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标记作为他们的年份(例如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-Axis特性。
我需要提供什么(即???)到ax.xaxis.set_major_locator(???)ax.xaxis.set_major_formatter(???)

ipakzgxi

ipakzgxi1#

是的,你的假设是对的:您必须手动设置定位器和格式化程序。“常规”的在matplotlib.ticker中可用,与日期相关的在matplotlib.dates中可用。有很多固定的(例如:WeekdayLocator、MicrosecondLocator等),而且还有使用plot时获得的自动定位器。
这样就可以了:

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

进一步阅读:http://matplotlib.org/api/dates_api.html

附加:

小心你的日期列表:matplotlib有一个内部的日期/时间表示(天数作为浮点数),因此在绘图之前需要转换日期时间对象。在plot中,这种转换会自动进行,对于自定义图形,您可能需要自己使用matplotlib.dates.date2num进行转换。

相关问题