Matplotlib 更改Matplotlib中日期轴的格式
阅读更多:Matplotlib 教程
背景
在可视化数据中,日期数据是非常常见的。Matplotlib是Python中最常用的可视化库,也是处理日期数据的好工具。然而,Matplotlib默认的日期格式可能不适合所有的应用场景。比如,将所有的日期数据都以“年-月-日”形式呈现可能不是最佳方案。因此,在一些情况下,更改Matplotlib日期轴的格式是非常有必要的。
实现
为了更改Matplotlib日期轴的格式,我们可以使用Matplotlib库中的日期格式化器。这个格式化器将日期转换为字符串形式,并将其显示在图表上。下面是一个简单的代码示例:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
#生成一些数据
dates = [dt.date(2021, 1, 1), dt.date(2021, 1, 2), dt.date(2021, 1, 3), dt.date(2021, 1, 4), dt.date(2021, 1, 5)]
values = [1, 3, 2, 4, 5]
#创建一个图形
fig, ax = plt.subplots()
#将数据绘制在图表上
ax.plot(dates, values)
#设置日期格式化器
date_format = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_format)
#显示图表
plt.show()
在上面的代码示例中,我们首先生成了一些日期数据和对应的值。然后,我们创建了一个图形,并将数据绘制在图表上。接着,我们使用日期格式化器将日期轴的格式更改为“年-月-日”形式。最后,我们显示了图形。
其他日期格式
除了“年-月-日”的形式,Matplotlib库提供了很多其他的日期格式化方式。下面是一些常见的日期格式化方式:
- %Y: 年份(4位数字)
- %m: 月份(01-12)
- %d: 日期(01-31)
- %H: 时(00-23)
- %M: 分(00-59)
- %S: 秒(00-59)
这些格式化方式可以根据我们的需求自由组合使用。下面是一个示例代码,演示如何将日期格式更改为“年-月-日 时:分:秒”的形式:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
#生成一些数据
dates = [dt.date(2021, 1, 1), dt.date(2021, 1, 2), dt.date(2021, 1, 3), dt.date(2021, 1, 4), dt.date(2021, 1, 5)]
values = [1, 3, 2, 4, 5]
#创建一个图形
fig, ax = plt.subplots()
#将数据绘制在图表上
ax.plot(dates, values)
#设置日期格式化器
date_format = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(date_format)
#显示图表
plt.show()
自定义日期格式
除了使用Matplotlib提供的格式化方式外,我们还可以自定义日期格式。下面是一个示例代码,融合了多个日期格式的元素,创建了一个自定义的日期格式:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
#生成一些数据
dates = [dt.date(2021, 1, 1), dt.date(2021, 1, 2), dt.date(2021, 1, 3), dt.date(2021, 1, 4), dt.date(2021, 1, 5)]
values = [1, 3, 2, 4, 5]
#创建一个图形
fig, ax = plt.subplots()
#将数据绘制在图表上
ax.plot(dates, values)
#自定义日期格式
date_format = mdates.DateFormatter('%d %b, %Y')
ax.xaxis.set_major_formatter(date_format)
#显示图表
plt.show()
在上面的代码示例中,我们自定义了一个日期格式,包括日期、月份缩写和年份。结果将在X轴上显示,格式如“01 Jan, 2021”。
修改日期轴间隔
在一些情况下,我们可能需要修改日期轴上的间隔。Matplotlib提供了一种快速的方式来修改这个间隔,即使用“date2num”函数将日期对象转换为数字,再使用“num2date”函数将数字转换回日期对象。下面是一个示例代码:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
#生成一些数据
dates = [dt.date(2021, 1, 1), dt.date(2021, 1, 5), dt.date(2021, 1, 10), dt.date(2021, 1, 15), dt.date(2021, 1, 20)]
values = [1, 3, 2, 4, 5]
#创建一个图形
fig, ax = plt.subplots()
#将数据绘制在图表上
ax.plot(dates, values)
#设置日期格式化器
date_format = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_format)
#设置日期间隔为2天
interval = 2
dates_num = mdates.date2num(dates)
ax.set_xticks(dates_num[::interval])
ax.set_xticklabels([mdates.num2date(num).strftime('%Y-%m-%d') for num in ax.get_xticks()])
#显示图表
plt.show()
在上面的代码示例中,我们使用“date2num”函数将日期对象转换为数字。“set_xticks”函数用于设置X轴的刻度位置。我们将日期对象转换为数字,并将间隔设为2天。最后,我们使用“num2date”函数将数字转换回日期对象,并将日期格式更改为“年-月-日”形式。结果将在X轴上显示,间隔为2天。
总结
在可视化数据中,日期数据是非常常见的。Matplotlib提供了很多便捷的功能来处理日期数据,其中包括更改日期轴的格式和间隔。我们可以使用预置的格式化方式,也可以创建自定义格式。Matplotlib的日期格式化工具不仅在可视化数据中非常实用,也可以帮助我们更好地理解和处理时间序列数据。