如何在 Python Matplotlib 中绘制两个不同间隔的时间序列在同一张图中?

如何在 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 等工具。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程