如何在Plotly中显式设置HeatMap水平刻度范围并添加单元格分隔线?
解决方案
1. 数据预处理:补全所有20轮列
原始透视表仅包含数据中存在的轮次,导致Plotly自动扩展x轴范围。先补全1-20轮的所有列,缺失轮次填充0:
import plotly.express as px import pandas as pd # 生成透视表并补全1-20轮列 kptable1 = kdf.pivot_table( index='bowling_team', columns='over', values='total_runs', aggfunc='sum', fill_value=0 ) # 重新索引列,确保包含1到20所有轮次 kptable1 = kptable1.reindex(columns=range(1, 21), fill_value=0)
2. 绘制热力图并设置刻度与分隔线
手动指定x轴刻度范围,添加单元格分隔线:
line_fig = px.imshow(kptable1, text_auto=True) # 限制x轴为1-20轮,添加水平分隔线 line_fig.update_xaxes( tickvals=list(range(1, 21)), ticktext=list(range(1, 21)), range=[0.5, 20.5], # 锁定x轴范围,避免自动扩展 showgrid=True, gridwidth=1, gridcolor='black' ) # 添加垂直分隔线 line_fig.update_yaxes( showgrid=True, gridwidth=1, gridcolor='black' ) # 优化背景与标题 line_fig.update_layout( xaxis_title='轮次', yaxis_title='投球队伍', plot_bgcolor='white' ) return line_fig
关键说明
- 刻度限制:通过
reindex补全1-20轮列,再用range=[0.5,20.5]锁定x轴范围,配合tickvals指定显示的刻度值,彻底避免刻度超出20。 - 单元格分隔线:开启x、y轴网格线,设置
gridwidth=1和gridcolor='black',让每个单元格的边界清晰可见。
内容的提问来源于stack exchange,提问作者MVKXXX
相关产品推荐
相关产品推荐

