基于不同日期范围的DataFrame创建并排子图报错求助
基于不同日期范围的DataFrame创建并排子图报错求助
嘿,我看了你的问题和代码,发现两个关键问题导致了报错,还可能让你的时间范围筛选不符合预期,咱们一步步来解决:
问题1:子图索引使用错误
你用plt.subplots(nrows=1, ncols=2)创建的是1行2列的子图布局,返回的axes是一维数组,不是二维的。所以你写axes[0,0]和axes[0,1]会触发IndexError——因为一维数组只能用单个索引值访问,比如axes[0](左图)和axes[1](右图)。
问题2:日期筛选的逻辑与格式问题
你的需求里的时间范围和代码里写的完全对不上:
- 你要左图展示28/02/2022到09/03/2023的数据,但代码里写的是
df['Date'] < '10/03/2022',日期年份和范围都错了 - 另外,如果你直接用字符串比较日期,很容易出问题(比如不同格式的字符串排序逻辑不对),所以第一步要把
Date列转换成datetime类型
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt # 假设你的data是原始数据集 df = pd.DataFrame(data) # 第一步:把Date列转换成datetime类型,指定格式为日/月/年 df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') # 第二步:按照需求筛选正确的日期范围 before_bankrupt = df[(df['Date'] >= '2022-02-28') & (df['Date'] <= '2023-03-09')] after_bankrupt = df[(df['Date'] >= '2023-03-09') & (df['Date'] <= '2023-04-26')] # 第三步:创建1行2列的子图,可指定图的大小让布局更美观 fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 4)) # 第四步:分别在两个子图上绘制折线图,指定x轴为Date,y轴为Price before_bankrupt.plot(x='Date', y='Price', ax=axes[0], title='28/02/2022 - 09/03/2023') after_bankrupt.plot(x='Date', y='Price', ax=axes[1], title='09/03/2023 - 26/04/2023') # 加上x轴标签,让图的信息更直观 axes[0].set_xlabel('Date') axes[1].set_xlabel('Date') # 自动调整子图间距,避免标题、标签重叠 plt.tight_layout() plt.show()
关键说明
- 转换
Date列为datetime类型后,日期比较会更准确,不会出现字符串排序的逻辑错误 - 筛选日期时用
&连接条件,并且每个条件要用括号括起来(避免运算符优先级问题) - 绘图时明确指定
x='Date'和y='Price',确保只绘制你需要的两个字段的关系 - 加上
title和xlabel可以让子图的信息更清晰易懂
备注:内容来源于stack exchange,提问作者Lok
相关产品推荐
相关产品推荐

