Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020

Version 3.1.1
matplotlib
Fork me on GitHub

目录

Related Topics

日期

Inheritance diagram of matplotlib.dates

matplotlib.dates

Matplotlib提供了复杂的日期绘制功能,支持python datetime 以及附加模块 dateutil .

Matplotlib日期格式

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、tu
  • MonthLocator :定位月份,例如7月为7月
  • YearLocator :查找基数倍数的年份
  • RRuleLocator :使用 matplotlib.dates.rrulewrapper . 这个 rrulewrapper 是一个简单的包装 dateutil.rrule (dateutil )它允许几乎任意的日期标记规范。见 rrule example .
  • AutoDateLocator :在自动缩放中,此类选择最佳 DateLocator (例如, RRuleLocator )设置视图限制和刻度位置。如果被调用 interval_multiples=True 它将使滴答与滴答间隔的合理倍数对齐。例如,如果间隔为4小时,它将选择0、4、8等小时作为刻度。这种行为在默认情况下是不能保证的。

日期格式化程序

这里所有的日期格式设置工具:

matplotlib.dates.datestr2num(d, default=None)[源代码]

使用将日期字符串转换为datenum dateutil.parser.parse() .

参数:
d : 字符串或字符串序列

要转换的日期。

违约 : 日期时间实例,可选

字段丢失时使用的默认日期 d .

matplotlib.dates.date2num(d)[源代码]

将datetime对象转换为matplotlib日期。

参数:
ddatetime.datetimenumpy.datetime64 或这些序列 : datetime.datetime或numpy.datetime64或其序列
返回:
浮动或浮动顺序

自0001-01-01 00:00:00:00 UTC起的天数(分数部分表示小时、分钟、秒、毫秒),加上1。

笔记

这里加一件是历史文物。另外,请注意,公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。

matplotlib.dates.num2date(x, tz=None)[源代码]

将Matplotlib日期转换为 datetime 物体。

参数:
x : 浮动或浮动顺序

自0001-01-01 00:00:00:00 UTC起的天数(分数部分表示小时、分钟、秒),加上1。

tz : 字符串,可选

时区 x (默认为rcparams timezone

返回:
`~datetime.datetime` or sequence of `~datetime.datetime`

日期在时区中返回 tz .

如果 x 是一个序列,一个序列 datetime 将返回对象。

笔记

这里加一件是历史文物。另外,请注意,公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。

matplotlib.dates.num2timedelta(x)[源代码]

将天数转换为 timedelta 对象。

如果 x 是一个序列,一个序列 timedelta 将返回对象。

参数:
x : 浮动,浮动顺序

天数。分数部分表示小时、分钟、秒。

返回:
`datetime.timedelta` or list[`datetime.timedelta`]
matplotlib.dates.drange(dstart, dend, delta)[源代码]

返回等距Matplotlib日期序列。

日期开始于 DSTART 达到但不包括 dend . 它们的间距为 三角洲 .

参数:
dStanddatetime : 日期时间

日期限制。

三角洲datetime.timedelta : datetime.timedelta

日期间隔。

返回:
德朗格numpy.array : numpy.array

表示matplotlib日期的列表浮动。

matplotlib.dates.epoch2num(e)[源代码]

将纪元或纪元序列转换为新的日期格式,即自0001起的天数。

matplotlib.dates.num2epoch(d)[源代码]

将自0001起的天数转换为epoch。 d 可以是数字或序列。

matplotlib.dates.mx2num(mxdates)[源代码]

转换MX datetime 新日期格式的实例(或MX实例序列)。

class matplotlib.dates.DateFormatter(fmt, tz=None)[源代码]

基类:matplotlib.ticker.Formatter

刻度线位置是自纪元以来的秒数。使用A strftime() 格式化字符串。

python只支持 datetime strftime() 设置大于1900年的格式。感谢Andrew Dalke,Dalke科学软件公司 strftime() 下面的代码包括早于今年的日期。

fmt 是一个 strftime() 格式字符串; tz
tzinfo 实例。
illegal_s = re.compile('((^|[^%])(%%)*%s)')
set_tzinfo(tz)[源代码]
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中删除。

在1900年之前通过滚动呼叫time.strftime

向前推进28年的倍数。

fmt 是一个 strftime() 格式化字符串。

达尔克:我希望我做得对。历法每28年重复一次,世纪闰年除外,400年闰年除外。但只有当你使用公历的时候。

class matplotlib.dates.IndexDateFormatter(t, fmt, tz=None)[源代码]

基类:matplotlib.ticker.Formatter

使用与 IndexLocator 按索引循环格式字符串。

t 是日期序列(浮点天数)。 fmt 是一个 strftime() 格式化字符串。

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

class matplotlib.dates.DateLocator(tz=None)[源代码]

基类:matplotlib.ticker.Locator

确定绘制日期时的刻度位置。

这个类被其他定位器子类化,并不打算单独使用。

tz 是一个 tzinfo 实例。

datalim_to_dt()[源代码]

将轴数据间隔转换为日期时间对象。

hms0d = {'byhour': 0, 'byminute': 0, 'bysecond': 0}
nonsingular(vmin, vmax)[源代码]

给定所建议的上下范围,如果范围太接近奇异值(即范围~0),则调整范围。

set_tzinfo(tz)[源代码]

设置时区信息。

viewlim_to_dt()[源代码]

将视图间隔转换为日期时间对象。

class matplotlib.dates.RRuleLocator(o, tz=None)[源代码]

基类:matplotlib.dates.DateLocator

autoscale()[源代码]

设置视图限制以包括数据范围。

static get_unit_generic(freq)[源代码]
tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class 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
autoscale()[源代码]

尝试智能地选择视图限制。

get_locator(dmin, dmax)[源代码]

根据距离选择最佳定位器。

nonsingular(vmin, vmax)[源代码]

给定所建议的上下范围,如果范围太接近奇异值(即范围~0),则调整范围。

refresh()[源代码]

根据当前限制刷新内部信息。

set_axis(axis)[源代码]
tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class 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