Matplotlib 如何更改matplotlib中datetime轴的格式
在使用matplotlib绘制时间序列(time-series)数据时,经常需要对时间轴进行格式化以更好地呈现时间序列数据的变化趋势。本文将介绍如何在matplotlib中更改datetime轴的格式。
阅读更多:Matplotlib 教程
1. datetime格式化
在使用matplotlib进行时间序列数据的可视化时,通常使用到datetime格式,在python中,datetime格式是通过datetime库中的datetime对象表示的。datetime对象包括年、月、日、时、分、秒和微秒等多种属性。
下面是一个datetime对象的例子:
import datetime
dt = datetime.datetime(2022, 9, 15, 18, 0)
该对象表示的是2022年9月15日18时的时间。
在matplotlib中,当使用datetime对象作为x轴的数据时,可通过调用matplotlib中的日期格式化函数,将datetime格式化为想要的格式。matplotlib中日期格式化函数包含在matplotlib.dates模块中。
下面是一些常见的datetime格式化字符串:
字符 | 含义 | 示例 |
---|---|---|
%Y | 年份,四位数字 | 2021 |
%m | 月份,两位数字 | 01 |
%B | 月份,英文全名 | January |
%b | 月份,英文缩写 | Jan |
%d | 日期,两位数字 | 01 |
%A | 星期,英文全名 | Monday |
%a | 星期,英文缩写 | Mon |
%H | 小时,24小时制,两位数字 | 00 |
%I | 小时,12小时制,两位数字 | 01 |
%p | 上午/下午 | AM |
%M | 分钟,两位数字 | 09 |
%S | 秒,两位数字 | 05 |
%f | 微秒,六位数字 | 000000 |
%z | 时区,UTC偏移量 | +0900 |
%Z | 时区,英文缩写 | JST |
%j | 年份内的天数,三位数字 | 365 |
%U | 年份内的周数,两位数字,以周日为一周的开始 | 01 |
%W | 年份内的周数,两位数字,以周一为一周的开始 | 01 |
%c | 本地日期时间 | Mon Jan 10 16:15:30 2022 |
%x | 本地日期 | 01/10/22(Windows)、01/10/22(Linux) |
%X | 本地时间 | 16:15:30 |
%r | 本地时间,12小时制 | 04:15:30 PM |
字符串格式化符号可以组合使用。例如:”%Y-%m-%d %H:%M:%S”表示年-月-日 时:分:秒。
2. 设置datetime格式化
在matplotlib中,设置datetime格式化有两种方法,一种是通过调用matplotlib.dates中的date2num()函数将datetime对象转换为数字类型,另一种是通过调用matplotlib中的日期格式化器、日期定位器来设置datetime格式化。
2.1 利用date2num()函数
date2num()函数用于将datetime对象转换为数字类型。下面是一个简单的例子:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
x = [datetime.datetime(2022, 1, 1),
datetime.datetime(2022, 2, 1),
datetime.datetime(2022, 3, 1),
datetime.datetime(2022, 4, 1),
datetime.datetime(2022, 5, 1),
datetime.datetime(2022, 6, 1)]
y = [3, 6, 5, 8, 9, 7]
x_num = mdates.date2num(x)
fig, ax = plt.subplots()
ax.plot(x_num, y)
plt.show()
在这个例子中,我们首先创建了一个x轴数据列表x和一个y轴的数据列表y。接着将x列表中的datetime对象转换为数字类型,并将转换后的x轴数据x_num用于绘图。
可以看到,x轴上的刻度显示为数字类型,没有对日期进行格式化。
2.2 日期格式化器
要对x轴上的时间进行格式化,需要使用日期格式化器。matplotlib中提供了多个日期格式化器。下面是一些常见的日期格式化器:
- DateFormatter:将日期格式化为字符串类型显示在轴上。
- FixedFormatter:将固定标签列表格式化为字符串显示在轴上。
- IndexFormatter:将轴上的索引格式化为字符串显示在轴上。
在本文中,我们主要介绍DateFormatter这个日期格式化器。
下面是一个利用DateFormatter格式化datetime的例子:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
x = [datetime.datetime(2022, 1, 1),
datetime.datetime(2022, 2, 1),
datetime.datetime(2022, 3, 1),
datetime.datetime(2022, 4, 1),
datetime.datetime(2022, 5, 1),
datetime.datetime(2022, 6, 1)]
y = [3, 6, 5, 8, 9, 7]
fig, ax = plt.subplots()
ax.plot(x, y)
date_format = mdates.DateFormatter('%Y/%m/%d')
ax.xaxis.set_major_formatter(date_format)
plt.xticks(rotation=45, ha='right')
plt.show()
在这个例子中,我们与之前的例子相比,多设置了一个日期格式化器date_format,用于将datetime类型的日期转换为字符串类型。date_format的参数’%Y/%m/%d’表示将日期格式化为年/月/日的形式。接下来,我们调用ax.xaxis.set_major_formatter(date_format)函数将date_format设置为x轴的主要格式化,用于格式化x轴上的日期。
可以看到,x轴上的刻度已经被格式化为年/月/日的形式。我们还可以使用其他的日期格式化符号,例如’%Y/%m/%d %H:%M:%S’表示将日期格式化为年/月/日 时:分:秒的形式。
2.3 日期定位器
日期定位器用于设置刻度的位置。matplotlib中提供了多个日期定位器,可用于不同的时间间隔,例如天、月、年等。下面是一些常见的日期定位器:
- DayLocator:用于设置x轴刻度为每天。
- MonthLocator:用于设置x轴刻度为每月。
- YearLocator:用于设置x轴刻度为每年。
在本文中,我们主要介绍DayLocator这个日期定位器。
下面是一个利用DayLocator设置日期定位器的例子:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
x = [datetime.datetime(2022, 1, 1),
datetime.datetime(2022, 1, 5),
datetime.datetime(2022, 1, 10),
datetime.datetime(2022, 1, 15),
datetime.datetime(2022, 1, 20)]
y = [3, 6, 5, 8, 9]
fig, ax = plt.subplots()
ax.plot(x,y)
date_format = mdates.DateFormatter('%Y/%m/%d')
ax.xaxis.set_major_formatter(date_format)
# 设置日期定位器
day_locator = mdates.DayLocator()
ax.xaxis.set_major_locator(day_locator)
plt.xticks(rotation=45, ha='right')
plt.show()
在这个例子中,我们与之前的例子相比,多设置了一个日期定位器day_locator,用于将x轴上的刻度设置为每天的形式。接下来,我们调用ax.xaxis.set_major_locator(day_locator)函数将day_locator设置为x轴的主要定位器,用于控制x轴上的刻度。
可以看到,x轴上的刻度已经被设置为每天的形式。
3. 总结
本文主要介绍了如何在matplotlib中更改datetime轴的格式。通过调用matplotlib中的日期格式化函数、日期格式化器和日期定位器,可以将datetime对象格式化为指定格式的字符串,并将其显示在x轴上。在实际的时间序列数据可视化中,设置好datetime格式化可以更好地展示时间序列数据的趋势变化。