Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020
matplotlib.dates
¶Matplotlib提供了复杂的日期绘制功能,支持python datetime
以及附加模块 dateutil
.
matplotlib表示日期,使用浮点数指定自0001-01-01 UTC以来的天数,加上1。例如,0001-01-01,06:00是1.25,而不是0.25。不支持小于1的值,即日期早于0001-01-01 UTC。
有许多助手函数要在 datetime
对象和Matplotlib日期:
datestr2num |
使用将日期字符串转换为datenum dateutil.parser.parse() . |
date2num |
将datetime对象转换为matplotlib日期。 |
num2date |
将Matplotlib日期转换为 datetime 物体。 |
num2timedelta |
将天数转换为 timedelta 对象。 |
epoch2num |
将纪元或纪元序列转换为新的日期格式,即自0001起的天数。 |
num2epoch |
将自0001起的天数转换为epoch。 |
mx2num |
转换MX datetime 新日期格式的实例(或MX实例序列)。 |
drange |
返回等距Matplotlib日期序列。 |
注解
与python的datetime类似,mpl使用公历进行日期和浮点数之间的所有转换。这种做法并不普遍,日历差异可能会导致python和mpl给出的天数(自0001-01-01以来的天数)与其他软件和数据库产生的天数之间存在令人困惑的差异。例如,美国海军天文台在1582年10月使用了一个从儒略到公历的日历。因此,使用计算器,0001-01-01和2006-04-01之间的天数为732403天,而通过日期时间模块使用公历,我们发现:
In [1]: date(2006, 4, 1).toordinal() - date(1, 1, 1).toordinal()
Out[1]: 732401
所有Matplotlib日期转换器、ticker和格式化程序都具有时区意识。如果没有提供显式时区,则RCPARAM timezone
是假设。如果要使用自定义时区,请通过 datetime.tzinfo
带有TZ关键字参数的实例 num2date()
, plot_date()
以及您创建的任何自定义日期标记或定位器。
本模块提供了广泛的特定和通用日期刻度定位器和格式化程序。见 matplotlib.ticker
有关勾号定位器和格式化程序的一般信息。这些内容如下所述。
这个 dateutil module 提供额外的代码来处理日期标记,使在任何类型的日期上放置标记变得容易。见下面的例子。
大多数日期标记可以定位单个或多个值。例如::
# import constants for the days of the week
from matplotlib.dates import MO, TU, WE, TH, FR, SA, SU
# tick on mondays every week
loc = WeekdayLocator(byweekday=MO, tz=tz)
# tick on mondays and saturdays
loc = WeekdayLocator(byweekday=(MO, SA))
此外,大多数构造函数采用间隔参数::
# tick on mondays every second week
loc = WeekdayLocator(byweekday=MO, interval=2)
规则定位器允许完全通用的日期标记:
# tick every 5th easter
rule = rrulewrapper(YEARLY, byeaster=1, interval=5)
loc = RRuleLocator(rule)
以下是所有的日期标签:
MicrosecondLocator
:定位微秒SecondLocator
:定位秒数MinuteLocator
:定位分钟HourLocator
定位小时DayLocator
:查找指定的月份日期WeekdayLocator
:查找一周中的几天,例如,mo、tuMonthLocator
:定位月份,例如7月为7月YearLocator
:查找基数倍数的年份RRuleLocator
:使用matplotlib.dates.rrulewrapper
. 这个rrulewrapper
是一个简单的包装dateutil.rrule
(dateutil )它允许几乎任意的日期标记规范。见 rrule example .AutoDateLocator
:在自动缩放中,此类选择最佳DateLocator
(例如,RRuleLocator
)设置视图限制和刻度位置。如果被调用interval_multiples=True
它将使滴答与滴答间隔的合理倍数对齐。例如,如果间隔为4小时,它将选择0、4、8等小时作为刻度。这种行为在默认情况下是不能保证的。
这里所有的日期格式设置工具:
AutoDateFormatter
:尝试找出要使用的最佳格式。当与AutoDateLocator
.DateFormatter
使用strftime()
格式串IndexDateFormatter
:隐式日期图 x 索引。
matplotlib.dates.
datestr2num
(d, default=None)[源代码]¶使用将日期字符串转换为datenum dateutil.parser.parse()
.
参数: |
|
---|
matplotlib.dates.
date2num
(d)[源代码]¶将datetime对象转换为matplotlib日期。
参数: |
|
---|---|
返回: |
|
笔记
这里加一件是历史文物。另外,请注意,公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。
matplotlib.dates.
num2date
(x, tz=None)[源代码]¶将Matplotlib日期转换为 datetime
物体。
参数: |
|
---|---|
返回: |
|
笔记
这里加一件是历史文物。另外,请注意,公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。
matplotlib.dates.
num2timedelta
(x)[源代码]¶将天数转换为 timedelta
对象。
如果 x 是一个序列,一个序列 timedelta
将返回对象。
参数: |
|
---|---|
返回: |
|
matplotlib.dates.
drange
(dstart, dend, delta)[源代码]¶返回等距Matplotlib日期序列。
日期开始于 DSTART 达到但不包括 dend . 它们的间距为 三角洲 .
参数: |
|
---|---|
返回: |
|
matplotlib.dates.
DateFormatter
(fmt, tz=None)[源代码]¶基类:matplotlib.ticker.Formatter
刻度线位置是自纪元以来的秒数。使用A strftime()
格式化字符串。
python只支持 datetime
strftime()
设置大于1900年的格式。感谢Andrew Dalke,Dalke科学软件公司 strftime()
下面的代码包括早于今年的日期。
strftime()
格式字符串; tz 是tzinfo
实例。illegal_s
= re.compile('((^|[^%])(%%)*%s)')¶strftime
(dt, fmt=None)[源代码]¶3.0 版后已移除: strftime函数在matplotlib 3.0中已弃用,将在3.2中删除。
参考文档 datetime.datetime.strftime()
fmt 是一个 datetime.datetime.strftime()
格式化字符串。
警告:对于1900年之前的年份,根据当前的区域设置,可能显示的带有%x的年份不正确。在100%之前的几年中,%y和%y将产生零填充字符串。
strftime_pre_1900
(dt, fmt=None)[源代码]¶3.0 版后已移除: strftime_pre_1900函数在matplotlib 3.0中已被弃用,将在3.2中删除。
向前推进28年的倍数。
fmt 是一个 strftime()
格式化字符串。
达尔克:我希望我做得对。历法每28年重复一次,世纪闰年除外,400年闰年除外。但只有当你使用公历的时候。
matplotlib.dates.
IndexDateFormatter
(t, fmt, tz=None)[源代码]¶基类:matplotlib.ticker.Formatter
使用与 IndexLocator
按索引循环格式字符串。
t 是日期序列(浮点天数)。 fmt 是一个 strftime()
格式化字符串。
matplotlib.dates.
AutoDateFormatter
(locator, tz=None, defaultfmt='%Y-%m-%d')[源代码]¶基类:matplotlib.ticker.Formatter
这个类试图找出要使用的最佳格式。当与 AutoDateLocator
.
自动日期格式设置工具有一个比例字典,它映射刻度的比例(一个主要刻度之间的距离,以天为单位)和格式字符串。默认设置如下:
self.scaled = {
DAYS_PER_YEAR: rcParams['date.autoformat.year'],
DAYS_PER_MONTH: rcParams['date.autoformat.month'],
1.0: rcParams['date.autoformat.day'],
1. / HOURS_PER_DAY: rcParams['date.autoformat.hour'],
1. / (MINUTES_PER_DAY): rcParams['date.autoformat.minute'],
1. / (SEC_PER_DAY): rcParams['date.autoformat.second'],
1. / (MUSECONDS_PER_DAY): rcParams['date.autoformat.microsecond'],
}
算法在字典中选择大于等于当前比例的键,并使用该格式字符串。您可以通过执行以下操作自定义此词典:
>>> locator = AutoDateLocator()
>>> formatter = AutoDateFormatter(locator)
>>> formatter.scaled[1/(24.*60.)] = '%M:%S' # only show min and sec
风俗习惯 FuncFormatter
也可以使用。下面的示例演示如何使用自定义格式函数从十进制秒中去除尾随零,并将日期添加到第一个滴答标签:
>>> def my_format_function(x, pos=None):
... x = matplotlib.dates.num2date(x)
... if pos == 0:
... fmt = '%D %H:%M:%S.%f'
... else:
... fmt = '%H:%M:%S.%f'
... label = x.strftime(fmt)
... label = label.rstrip("0")
... label = label.rstrip(".")
... return label
>>> from matplotlib.ticker import FuncFormatter
>>> formatter.scaled[1/(24.*60.)] = FuncFormatter(my_format_function)
自动设置日期标签的格式。如果中没有任何值,则默认格式为要使用的格式。 self.scaled
大于返回的单位 locator._get_unit()
.
matplotlib.dates.
DateLocator
(tz=None)[源代码]¶确定绘制日期时的刻度位置。
这个类被其他定位器子类化,并不打算单独使用。
tz 是一个 tzinfo
实例。
hms0d
= {'byhour': 0, 'byminute': 0, 'bysecond': 0}¶matplotlib.dates.
AutoDateLocator
(tz=None, minticks=5, maxticks=None, interval_multiples=True)[源代码]¶基类:matplotlib.dates.DateLocator
在自动缩放时,此类选择最佳 DateLocator
设置视图限制和刻度位置。
迷你短裤 是所需的最小刻度数,用于选择刻度类型(每年、每月等)。
麦克斯克 是所需的最大刻度数,它控制刻度之间的任何间隔(每隔3个刻度,等等)。对于真正的细粒度控制,这可以是一个字典,将单个rrule频率常数(每年、每月等)映射到它们自己的最大刻度数。这可用于保持适合在中选择的格式的刻度数。 AutoDateFormatter
. 本字典中未指定的任何频率都会得到一个默认值。
tz 是一个 tzinfo
实例。
interval_multiples 是一个布尔值,指示是否应将刻度选择为间隔的倍数。这会将滴答锁定到“更好”的位置。例如,当每小时计时间隔为6小时时,这将强制计时为0、6、12、18小时。
自动日期定位器有一个间隔字典,它映射勾选的频率(dateutil.rrule中的常量)和该勾选允许的倍数。默认设置如下:
self.intervald = {
YEARLY : [1, 2, 4, 5, 10, 20, 40, 50, 100, 200, 400, 500,
1000, 2000, 4000, 5000, 10000],
MONTHLY : [1, 2, 3, 4, 6],
DAILY : [1, 2, 3, 7, 14],
HOURLY : [1, 2, 3, 4, 6, 12],
MINUTELY: [1, 5, 10, 15, 30],
SECONDLY: [1, 5, 10, 15, 30],
MICROSECONDLY: [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000,
5000, 10000, 20000, 50000, 100000, 200000, 500000,
1000000],
}
间隔用于指定适合滴答频率的倍数。例如,每7天对于每天的滴答声是合理的,但是对于分钟/秒,15或30是合理的。您可以通过执行以下操作自定义此词典:
locator = AutoDateLocator()
locator.intervald[HOURLY] = [3] # only show every 3 hours
matplotlib.dates.
YearLocator
(base=1, month=1, day=1, tz=None)[源代码]¶基类:matplotlib.dates.DateLocator
在每年的某一天打勾,这是基数的倍数。
实例:
# Tick every year on Jan 1st
locator = YearLocator()
# Tick every 5 years on