You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:51:20