如何在Matplotlib中显示日期和时间轴?
Matplotlib是Python中最常用的数据可视化库之一,它可以用来绘制各种图形,包括折线图、散点图、柱状图等等。在Matplotlib中显示日期时间轴是非常常见的需求,在本篇文章中,我们将详细介绍如何在Matplotlib中显示日期和时间轴。
前置知识
在开始之前,我们需要掌握一些前置知识。
首先,我们需要了解datetime模块中的一些常用函数和类,因为Matplotlib中处理日期和时间数据的时候,通常需要使用datetime模块。下面是一些常用的datetime模块中的函数和类:
import datetime
# 获取当前时间
now = datetime.datetime.now()
# 创建一个时间对象
dt = datetime.datetime(2022, 5, 18, 14, 30)
# 格式化时间字符串
dt_str = dt.strftime('%Y-%m-%d %H:%M:%S')
# 解析时间字符串
dt = datetime.datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
# 时间加减
dt = dt + datetime.timedelta(days=1, hours=2, minutes=30)
# 获取日期
date = dt.date()
# 获取时间
time = dt.time()
# 获取时间戳
timestamp = dt.timestamp()
# 从时间戳创建时间对象
dt = datetime.datetime.fromtimestamp(timestamp)
其次,我们需要了解Matplotlib中的日期和时间格式化字符串,因为我们在绘制图形的时候需要使用这些格式化字符串来指定横轴的刻度格式。下面是一些常用的日期和时间格式化字符串:
import matplotlib.dates as mdates
# 将时间戳转换为日期格式的字符串(例如2022-05-18)
mdates.DateFormatter('%Y-%m-%d')
# 将时间戳转换为日期格式的字符串(例如2022/05/18)
mdates.DateFormatter('%Y/%m/%d')
# 将时间戳转换为日期时间格式的字符串(例如2022-05-18 14:30:00)
mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
# 将时间戳转换为整点小时格式的字符串(例如14:00)
mdates.DateFormatter('%H:%M')
在Matplotlib中显示日期轴
首先,我们来看如何在Matplotlib中显示日期轴。假设我们有一个包含日期和价格数据的CSV文件,如下所示:
date,price
2022-05-16,10
2022-05-17,12
2022-05-18,15
2022-05-19,13
2022-05-20,10
现在,我们要使用Matplotlib将这些数据绘制成折线图,并且横轴要显示日期信息。
首先,我们需要导入需要的模块:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import csv
import datetime
然后,我们可以使用csv模块来读取CSV文件中的数据,并将日期字符串转换为datetime对象。代码如下:
dates = []
prices = []
with open('data.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
date_str = row['date']
price = float(row['price'])
date = datetime.datetime.strptime(date_str, '%Y-%m-%d')
dates.append(date)
prices.append(price)
接下来,我们可以使用Matplotlib来绘制折线图,并指定横轴的刻度格式为日期格式。代码如下:
fig, ax = plt.subplots()
ax.plot(dates, prices)
date_formatter = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_formatter)
fig.autofmt_xdate(rotation=45)
plt.show()
我们使用ax.plot()函数来绘制折线图,使用ax.xaxis.set_major_formatter()函数来指定横轴的日期格式化字符串为’%Y-%m-%d’,即年-月-日的格式;使用fig.autofmt_xdate()函数来让横轴的日期标签旋转45度以免重叠。
运行以上代码,我们就可以看到绘制的折线图,其中横轴显示了日期信息。
在Matplotlib中显示时间轴
接下来,我们来看如何在Matplotlib中显示时间轴。假设我们有一个包含时间和价格数据的CSV文件,如下所示:
time,price
09:00,10
10:00,12
11:00,15
12:00,13
13:00,10
现在,我们要使用Matplotlib将这些数据绘制成折线图,并且横轴要显示时间信息。
首先,我们需要导入需要的模块:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import csv
import datetime
然后,我们可以使用csv模块来读取CSV文件中的数据,并将时间字符串转换为datetime.time对象。代码如下:
times = []
prices = []
with open('data.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
time_str = row['time']
price = float(row['price'])
time = datetime.datetime.strptime(time_str, '%H:%M').time()
times.append(time)
prices.append(price)
接下来,我们可以使用Matplotlib来绘制折线图,并指定横轴的刻度格式为整点小时格式。代码如下:
fig, ax = plt.subplots()
ax.plot(times, prices)
time_formatter = mdates.DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(time_formatter)
plt.show()
我们使用ax.plot()函数来绘制折线图,使用ax.xaxis.set_major_formatter()函数来指定横轴的日期格式化字符串为’%H:%M’,即整点小时的格式。
运行以上代码,我们就可以看到绘制的折线图,其中横轴显示了时间信息。
结论
在Matplotlib中显示日期和时间轴是非常常见的需求,我们可以使用datetime模块中的函数和类来处理日期和时间数据,使用Matplotlib中的日期和时间格式化字符串来指定横轴的刻度格式。在使用Matplotlib绘制折线图的时候,我们只需要使用ax.xaxis.set_major_formatter()函数来指定横轴的日期或者时间格式化字符串即可。