如何在 Python Matplotlib 中绘制两个不同间隔的时间序列在同一张图中?
Matplotlib 是 Python 中常用的绘图工具之一。在时间序列数据的处理和可视化中,Matplotlib 可以很好地实现时间序列数据的绘制。但是,当我们要同时绘制两个不同时间间隔的时间序列时,可能会遇到一些问题。本文将介绍如何使用 Matplotlib 在一张图中绘制两个不同间隔的时间序列。
问题描述
假设我们要绘制两个时间序列的变化趋势,分别是某地区每天的总降雨量和每月的平均气温。这两个时间序列的时间间隔是不同的,总降雨量是按天统计的,平均气温是按月统计的,如何在同一张图中绘制这两个时间序列呢?
解决方案
数据准备
我们首先需要准备好数据,设总降雨量的时间序列为 rainfall
,平均气温的时间序列为 temperature
,它们的时间范围分别是从 2020 年 1 月 1 日至 2022 年 12 月 31 日。以下是示例数据的前几行:
import pandas as pd
# 总降雨量
rainfall = pd.DataFrame({
"Time": pd.date_range(start="2020-01-01", end="2022-12-31"),
"Amount": np.random.randint(low=0, high=50, size=1096)
})
# 平均气温
temperature = pd.DataFrame({
"Time": pd.date_range(start="2020-01-01", end="2022-12-31", freq="MS"),
"Temp": np.random.normal(15, 5, size=36)
})
绘制图形
接下来我们使用 Matplotlib 的子图(subplot)功能,在同一张图中绘制两个时间序列。代码如下:
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
# 左轴:总降雨量
ax1.plot(rainfall["Time"], rainfall["Amount"], color="blue")
ax1.set_xlabel("Time")
ax1.set_ylabel("Rainfall Amount", color="blue")
# 右轴:平均气温
ax2 = ax1.twinx()
ax2.plot(temperature["Time"], temperature["Temp"], color="red")
ax2.set_ylabel("Temperature", color="red")
plt.show()
运行上述代码后,将会得到绘制好的两个时间序列在同一张图中的结果
在上述代码中,我们使用了 plt.subplots()
方法创建了一个子图。通过 ax1.plot()
来绘制左边的时间序列,同时对左边的坐标轴进行标注;使用 ax1.twinx()
将右边的时间序列绘制到同一张图中,同时对右边的坐标轴进行标注。
结论
本文介绍了如何在 Python Matplotlib 中绘制两个不同间隔的时间序列在同一张图中,通过使用 Matplotlib 的子图功能,将不同的时间序列同时绘制到同一张图中,而不会出现数据错位等问题。关于时间序列数据的处理和可视化,还可以进一步学习 Pandas 和 Seaborn 等工具。