如何用Python绘制X轴为日期、Y轴为时间的热力图?
解决热力图仅显示单日期的问题
核心问题排查与解决步骤
1. 修正日期格式(关键前提)
如果day列带时间戳(比如2024-05-20 14:30:00),会被识别为不同的日期条目,导致无法按自然日分组。需提取纯日期部分:
import pandas as pd # 读取数据(替换为你的数据文件路径) df = pd.read_csv("data.csv") # 转换为日期格式并提取纯日期 df['day'] = pd.to_datetime(df['day']).dt.date # 处理时间列(若为字符串格式,转换为标准时间类型) df['time'] = pd.to_datetime(df['time']).dt.time
2. 构建符合热力图要求的二维数据结构
热力图需要行=时间、列=日期的二维表,通过透视表整理数据:
# 以统计每个日期-时间组合的记录数为例,可替换为你的目标数值列 pivot_data = df.pivot_table( index='time', columns='day', values='目标数值列', # 替换为你要展示的字段(如频次、温度等) aggfunc='count', # 聚合方式,按需选sum/mean等 fill_value=0 )
3. 绘制热力图
使用Seaborn生成符合需求的热力图:
import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(12, 8)) sns.heatmap(pivot_data, cmap='YlOrRd', annot=True, fmt='d') plt.xlabel('日期') plt.ylabel('时间') plt.title('日期-时间热力图') plt.xticks(rotation=45) # 旋转日期标签避免重叠 plt.tight_layout() plt.show()
常见问题定位
- 若仍显示单日期:检查原始数据是否真的包含多日期记录,若数据本身只有单日样本,需补充多日期数据。
- 时间轴乱序:可对时间按小时排序,简化展示维度:
df['time_hour'] = pd.to_datetime(df['time']).dt.hour pivot_data = df.pivot_table(index='time_hour', columns='day', ...)
内容的提问来源于stack exchange,提问作者saikat ghosh
相关产品推荐
相关产品推荐

