使用Pandas(Matplotlib)将多个时间序列DataFrames绘制到单个图中
案例介绍
本文将以一个转载的汽车销售数据集为例,在Python的Pandas(Matplotlib)中展示如何将多个时间序列DataFrames绘制到单个图中。这个数据集里有三个DataFrame,分别是:
- 销售额(sales):代表每个州在某个时间内的总销售额。
- 订单量(orders):代表每个州在某个时间内的订单数。
- 商品量(quantity):代表每个州在某个时间内的商品销售量。
我们将使用Pandas(Matplotlib)将这三个数据框中的数据绘制到同一个图中,以更清晰地了解数据之间的关联和趋势。
开始
首先,我们需要安装必要的依赖。Pandas 和 Matplotlib 库可以直接在 Python 中通过 pip 进行安装。在终端或命令提示符中,输入以下命令即可完成安装:
!pip install pandas
!pip install matplotlib
准备工作完成后,我们开始加载数据。首先,先定义需要使用的库:
import pandas as pd
import matplotlib.pyplot as plt
然后,我们可以从一个CSV文件中加载数据:
sales_df = pd.read_csv('sales.csv')
orders_df = pd.read_csv('orders.csv')
quantity_df = pd.read_csv('quantity.csv')
要在一个图中绘制多个数据框,需要使它们的 index 和 columns 中保持相同的形状。下面我们对数据进行预处理以使它们的索引和列标签相同。
我们需要将每个 DataFrames 中的州名(state)设置为行索引,将时间戳(timestamp)设置为列标签。
sales_df = sales_df.pivot(index='state', columns='timestamp', values='sales')
orders_df = orders_df.pivot(index='state', columns='timestamp', values='orders')
quantity_df = quantity_df.pivot(index='state', columns='timestamp', values='quantity')
为了比较三个数据框, 我们首先创建一个 figure 和 subplots:
fig, ax = plt.subplots()
接下来,我们使用数据框的 .plot()
方法进行绘制。在 plot 方法中传递数据,指定绘制的线类型和颜色。
为了区分每个数据框的线条,我们使用不同的颜色进行绘制。这里我们使用了红色,绿色和蓝色。
sales_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['r'], lw=2)
orders_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['g'], lw=2)
quantity_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['b'], lw=2)
最后,我们将在 ax 对象上设置标题和标签。
ax.set_title('Sales, Orders and Quantity')
ax.set_xlabel('Timestamp')
ax.set_ylabel('Amount')
完整的代码:
import pandas as pd
import matplotlib.pyplot as plt
sales_df = pd.read_csv('sales.csv')
orders_df = pd.read_csv('orders.csv')
quantity_df = pd.read_csv('quantity.csv')
sales_df = sales_df.pivot(index='state', columns='timestamp', values='sales')
orders_df = orders_df.pivot(index='state', columns='timestamp', values='orders')
quantity_df = quantity_df.pivot(index='state', columns='timestamp', values='quantity')
fig, ax = plt.subplots()
sales_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['r'], lw=2)
orders_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['g'], lw=2)
quantity_df.plot(ax=ax, kind='line', figsize=(15,10), legend=True, color=['b'], lw=2)
ax.set_title('Sales, Orders and Quantity')
ax.set_xlabel('Timestamp')
ax.set_ylabel('Amount')
plt.show
结论
通过本文的介绍,我们已经学会了如何使用 Pandas(Matplotlib)将多个时间序列数据框绘制在一个图中。借助 Pandas 的强大功能,我们可以对数据进行不同的转换和变换,以达到更好的可视化效果。同时,Matplotlib 提供了丰富的绘图功能,可以满足各种需求。
在实际分析中,我们可以将多个数据框中的数据按需组合起来,以便更好地比较它们之间的趋势和关联。这种分析方法不仅可以帮助我们更好地理解数据,也可以为做出更准确的决策提供帮助。