Python中如何以时间段为参数绘制线图及解决Period类型对比报错
报错原因
- 变量维度不匹配:
month是和原始数据集Ventes_df行数一致的序列,而ca_mensu是按月聚合后的汇总结果,行数等于不同月份的数量,二者长度不一致无法一一对应 - 传参规则错误:使用
sns.lineplot指定data参数时,x/y/hue参数默认需要传入data内部的列名字符串,直接传入外部独立的Series会导致seaborn匹配索引时,出现Period类型和整数类型无法比较的问题
解决方案
第一步:先完成数据聚合,生成绘图专用的汇总表
# 按年份、月份分组聚合销售额,保留后续绘图需要的字段 Ventes_agg = Ventes_df.groupby( [Ventes_df["date"].dt.year.rename("year"), Ventes_df["date"].dt.to_period("M").rename("month")] )["price"].sum().reset_index(name="ca_mensu") # 可选操作:将Period类型的月份转为时间戳,更适合时间轴展示 Ventes_agg["month"] = Ventes_agg["month"].dt.to_timestamp()
第二步:调用seaborn绘图,直接传入聚合后的数据集
import seaborn as sns import matplotlib.pyplot as plt # 直接指定数据集内的列名即可 sns.lineplot(data=Ventes_agg, x="month", y="ca_mensu", hue="year") # 优化x轴标签展示,避免重叠 plt.xticks(rotation=45) plt.tight_layout() plt.show()
补充说明:如果不需要x轴显示为时间格式,也可以将month转为字符串类型,代码为Ventes_agg["month"] = Ventes_agg["month"].astype(str)
内容的提问来源于stack exchange,提问作者Atik
相关产品推荐
相关产品推荐

