如何在Matplotlib中将 Pandas dataframe 中的时间作为索引进行绘图?
在数据可视化中,一些常见的数据类型是时间序列数据。许多情况下,我们都需要使用时间作为横轴,并针对其他特征进行绘图。
在本文中,我们将重点关注如何在Matplotlib中将Pandas dataframe中的时间作为索引进行绘图。我们将介绍如何使用Pandas dataframe对时间序列数据进行处理和可视化的最佳实践。
为了说明该过程,我们将使用Pandas和Matplotlib库的示例。
所需环境
在开始之前,我们需要确保我们的环境中已经安装了以下库:
- Pandas: 用于数据处理和数据分析;
- Matplotlib: 用于数据可视化和绘图;
您可以通过使用pip install pandas matplotlib命令在终端中安装这些库。
Pandas dataframe 中的时间索引
Pandas dataframe有一个时间索引,用于提供更自然的方法来选择、切片和查询数据。如果您是一个时间序列数据的开发人员,那么时间索引会很重要,因为它不仅使数据更易于使用,还能提高代码的可读性。
时间索引通常是Pandas dataframe中的第一列,有时也被称为“时间戳”列。时间戳列的数据类型必须是Pandas中的datetime64或类似的类型。
创建一个有时间索引的Pandas dataframe
首先,我们将创建一个具有蓝莓销售数据的Pandas dataframe,并使用这个数据来演示如何在Matplotlib中将时间作为索引进行绘图。
import pandas as pd
import numpy as np
# 创建时间索引
dates = pd.date_range('20201001', periods=30)
# 创建蓝莓销售数据 dataframe
df = pd.DataFrame(np.random.rand(30, 3), index=dates, columns=['蓝莓', '草莓', '树莓'])
print(df.head())
这将创建一个名为df的Pandas dataframe,其中包含蓝莓、草莓和树莓的销售数据,并使用日期作为索引。
输出结果应该是这样的:
蓝莓 草莓 树莓
2020-10-01 0.759298 0.974995 0.676512
2020-10-02 0.267034 0.001421 0.586945
2020-10-03 0.048402 0.082929 0.873120
2020-10-04 0.911702 0.723145 0.809207
2020-10-05 0.508286 0.711423 0.580089
将Pandas dataframe中的时间索引作为横轴进行绘图
使用Matplotlib,我们可以将时间作为横轴,并绘制蓝莓、草莓、树莓的销售数据。使用代码示例:
import matplotlib.pyplot as plt
# 创建画布和坐标轴对象ax
fig, ax = plt.subplots()
# 将数据绘制到坐标轴上
df.plot(ax=ax)
# 调整x轴上标签的间距
fig.autofmt_xdate()
# 显示绘制结果
plt.show()
该代码将创建一个画布和一个坐标轴对象,并将DataFrame中的数据绘制到坐标轴对象上。
在Matplotlib中设置横轴为时间
Matplotlib中有许多选项可以设置横轴为时间。在下面的示例中,我们将演示几种最常见的方法。
方法1:使用plot_date()函数
使用plot_date()函数,可以将时间值放置在横轴上。该函数可以接受datetime对象列表作为参数,以及一个与时间列表对应的数值列表作为y轴数据。
import matplotlib.pyplot as plt
# 创建画布和坐标轴对象ax
fig, ax = plt.subplots()
# 将时间和数据绘制到坐标轴上
ax.plot_date(df.index, df['蓝莓'], '-')
# 设置横轴为时间格式
ax.xaxis.set_major_locator(mdates.DayLocator(interval=5))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# 显示绘制结果
plt.show()
该代码将绘制一个折线图,其中横轴为时间。在使用plot_date()函数时,要注意日期格式必须为datetime.datetime对象。
方法2:使用set_xticks()和set_xticklabels()函数
如果您不希望使用plot_date()函数,可以使用set_xticks()和set_xticklabels()函数来更改刻度标签的格式。
import matplotlib.pyplot as plt
# 创建画布和坐标轴对象ax
fig, ax = plt.subplots()
# 将数据绘制到坐标轴上
df.plot(ax=ax)
# 使用set_xticks()和set_xticklabels()函数更改横轴标签格式
ax.set_xticks(df.index)
ax.set_xticklabels(df.index.strftime("%Y-%m-%d"), rotation=45)
# 显示绘制结果
plt.show()
该代码将绘制一个折线图,其中横轴为时间。set_xticks()和set_xticklabels()函数允许我们自由选择x轴的刻度和标签。
方法3:使用plot()函数和格式化符号
Matplotlib还提供了许多格式化符号,可以将时间转换为日期格式。我们可以使用plot()函数和格式化符号来绘制数据,如下所示:
import matplotlib.pyplot as plt
# 创建画布和坐标轴对象ax
fig, ax = plt.subplots()
# 将数据绘制到坐标轴上
ax.plot(df.index, df['蓝莓'], '-o')
# 使用format符号将时间转换为日期格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# 显示绘制结果
plt.show()
在这个例子中,我们使用了格式化符号将时间转换为日期格式,并使用-o标记绘制数据。
结论
在本文中,我们介绍了如何在Matplotlib中将Pandas dataframe中的时间作为索引进行绘图。我们演示了如何创建具有时间索引的Pandas dataframe,并使用三种方法来绘制时间序列数据。
使用这些技术,您现在应该能够更好地可视化和分析您的时间序列数据了。
极客笔记