You need to enable JavaScript to run this app. 为什么无法将pandas数据序列传入calmap.yearplot生成日历热力图
优惠活动
大模型
产品
解决方案
定价
更多

为什么无法将pandas数据序列传入calmap.yearplot生成日历热力图

日历热力图异常问题修复方案

错误点排查

  • matplotlib导入错误:原代码导入的是matplotlib核心库而非绘图用的pyplot子模块,无法调用图像显示相关方法
  • 数值列未做类型转换:CSV读取后Time列默认为字符串格式,calmap需传入数值型数据才能识别热力值大小
  • 未处理单日多记录场景:若同一日期存在多条学习记录,需按日期聚合得到每日总时长,否则同一日期对应多个值会导致渲染逻辑异常
  • 缺失图像显示触发语句:调用绘图接口后需执行plt.show()才会在本地渲染并展示图像

修复后完整代码

import matplotlib.pyplot as plt
import pandas as pd
import calmap

# 读取CSV数据,若原文件自带表头可删除names参数,无需手动删除第一行
df = pd.read_csv('ImmersionHours.csv', names=['Type', 'Name', 'Date', 'Time', 'Total Time'])
df.drop([0], inplace=True)

# 格式转换:日期转datetime类型、学习时长转浮点型
df['Date'] = pd.to_datetime(df['Date'])
df['Time'] = df['Time'].astype(float)

# 设置日期为索引,按天聚合得到每日总学习时长,无学习记录的日期自动填充为0
df.set_index('Date', inplace=True)
daily_total = df['Time'].resample('D').sum()

# 绘制2021年日历热力图,可自定义cmap参数调整配色
calmap.yearplot(data=daily_total, year=2021, cmap='YlGn')
# 可选:添加图表标题
plt.title('2021年语言沉浸式学习时长热力图')
# 显示图像
plt.show()

补充说明

如果运行后热力图仍为空白,可执行print(daily_total[daily_total.index.year == 2021])打印2021年的学习数据,确认数据集内是否存在对应年份的有效记录,无对应数据时热力图不会渲染内容。

内容的提问来源于stack exchange,提问作者Shannon Slater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:06:04