为什么无法将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
相关产品推荐
相关产品推荐

