Plotly Go热力图未显示DataFrame全部行的问题解决请求
解决Plotly热力图缺失行的问题
问题根源
热力图缺失行的核心原因是**pivot_table生成的DataFrame索引(Hour)不完整**:原始数据中部分Hour没有对应记录时,pivot_table默认只会保留存在数据的Hour值,导致后续热力图的y轴缺少这些行。
解决步骤
1. 检查当前DataFrame的索引
先确认缺失的Hour是否存在于df的索引中:
print(df.index)
如果输出的索引没有包含所有预期的小时(比如0-23),说明需要补全索引。
2. 补全Hour索引
方法一:创建pivot_table时保留所有Hour行
修改pivot_table的参数,添加dropna=False,强制保留所有Hour的行(即使该行无数据,值为NaN):
df = result.pivot_table( index='Hour', columns='Weekday', values='Measurment', aggfunc='sum', margins=True, margins_name='Total', dropna=False # 关键:保留所有Hour行 )
方法二:手动生成完整索引并重新对齐
如果原始数据的Hour列本身就缺少部分小时值,需要手动生成完整的小时范围,再重新索引df:
import pandas as pd # 生成完整的小时索引(根据实际Hour的取值范围调整,比如0-23) full_hours = pd.Index(range(24), name='Hour') # 保留原有的'Total'行,将完整小时索引与Total合并 full_index = full_hours.append(pd.Index(['Total'])) # 重新索引df,缺失值填充为0(或NaN,根据需求选择) df = df.reindex(full_index, fill_value=0)
3. 重新绘制热力图
补全索引后,再用原代码绘制热力图即可显示所有行:
import plotly.graph_objects as go fig = go.Figure(data=go.Heatmap( z=df.values, x=df.columns, y=df.index, hoverongaps=False, # 可选:设置NaN/0值的显示颜色,优化视觉效果 colorscale='Viridis', zmin=0 )) fig.show()
额外注意事项
- 如果Hour是字符串类型(比如'00'、'01'),生成
full_hours时要对应字符串格式,比如full_hours = pd.Index([f"{h:02d}" for h in range(24)], name='Hour')。 - 若不需要
Total行,可以去掉margins=True参数,简化索引补全的步骤。
内容的提问来源于stack exchange,提问作者khrizz
相关产品推荐
相关产品推荐

