如何基于Pandas DataFrame按天绘制多城市折线图并修复轴格式
解决按天生成城市折线图及X轴格式问题
首先得确认你的DataFrame大概是这种结构(如果字段名不同,你可以按需调整):
# 示例数据结构参考 import pandas as pd data = { 'DATE': ['2024-05-01', '2024-05-01', '2024-05-01', '2024-05-02', '2024-05-02', '2024-05-02'], 'TIME_BIN': ['08:00', '12:00', '16:00', '08:00', '12:00', '16:00'], 'CITY': ['北京', '北京', '北京', '上海', '上海', '上海'], 'COUNT': [100, 200, 150, 120, 180, 220] } df = pd.DataFrame(data)
第一步:搞定X轴格式混乱问题
X轴乱序大概率是因为TIME_BIN不是标准时间类型,或者数据没按时间排序。咱先把这个核心问题解决:
# 将TIME_BIN转换为时间格式(根据你的实际格式调整format参数) df['TIME_BIN'] = pd.to_datetime(df['TIME_BIN'], format='%H:%M').dt.time # 按日期+时段排序,确保时间顺序完全正确 df = df.sort_values(by=['DATE', 'TIME_BIN'])
第二步:按天遍历生成独立折线图
不用手动遍历每天的每个时段,用groupby按日期分组,再结合Seaborn的lineplot就能轻松实现「每个城市一条彩色折线」的需求:
import matplotlib.pyplot as plt import seaborn as sns # 设置清爽的绘图风格 sns.set_style("whitegrid") # 按DATE分组,逐个生成图表 for date, daily_data in df.groupby('DATE'): # 创建画布,设置合适尺寸 plt.figure(figsize=(10, 6)) # 绘制折线图:hue=CITY自动给每个城市分配不同颜色,marker增强可读性 sns.lineplot(data=daily_data, x='TIME_BIN', y='COUNT', hue='CITY', marker='o', linewidth=2) # 调整X轴标签,避免重叠 plt.xticks(rotation=45, ha='right') # 设置图表标题和轴标签 plt.title(f"各城市时段计数统计 - {date}", fontsize=14) plt.xlabel("时段", fontsize=12) plt.ylabel("计数", fontsize=12) # 整理图例位置 plt.legend(title="城市", bbox_to_anchor=(1.05, 1), loc='upper left') # 自动调整布局,防止标签被截断 plt.tight_layout() # 显示图表,或者用plt.savefig()保存到本地 plt.show()
为啥之前用Seaborn没成功?
大概率踩了这两个坑:
TIME_BIN不是时间类型,导致X轴无法按时间顺序排列- 没有按日期分组,把多天的数据混在一起绘制,线条重叠混乱
如果你的TIME_BIN是包含日期的完整时间戳(比如2024-05-01 08:00),可以先拆分出单独的DATE列:
df['DATE'] = df['TIME_BIN'].dt.date df['TIME_BIN'] = df['TIME_BIN'].dt.time
这样调整后,每个日期会生成独立的图表,每个城市对应一条专属颜色的折线,X轴也会严格按时间顺序排列,不会再混乱啦!
内容的提问来源于stack exchange,提问作者Calculus
相关产品推荐
相关产品推荐

