Plotly go.Heatmap输入x与x轴不匹配,热图宽度异常求助
问题解析与解决方案
这不是bug,是你对go.Heatmap中x参数的作用理解有误。
原因说明
默认情况下,Plotly热图的x参数是作为数值轴刻度来使用的,色块的宽度会根据相邻x值的间距自动分配。你的x列表是[10,20,30,60],前三个值的间距都是10,最后一个间距是30(60-30),所以对应黄色的色块宽度会是其他色块的3倍,这是数值轴下的正常表现。
解决方案
根据你的需求(所有色块宽度一致),有两种实现方式:
方式一:将x轴设为分类轴
如果不需要x轴作为数值轴,只是想展示对应的标签,直接把x轴类型设为category,这样每个x值都会被当作独立分类,色块宽度自动均等:
import plotly.graph_objs as go import numpy as np import datetime x = [10,20,30,60] z1 = [0.25,0.50,0.75,1.0] z = [z1] y = ['blah1'] fig = go.Figure(data=go.Heatmap(z=z, x=x, y=y, colorscale='turbo', zmin=0, zmax=1.2)) fig.update_layout( template="plotly_dark", width=500, height=500, paper_bgcolor="rgb(37,37,38)", margin=dict(l=10, r=10, t=20, b=20), xaxis={'type': 'category'} # 关键修改:设置x轴为分类类型 ) fig.show()
方式二:保持数值轴但强制等宽色块
如果需要保留x轴的数值属性,同时让色块等宽,可以用等间距的x值配合自定义刻度标签:
import plotly.graph_objs as go import numpy as np import datetime # 用等间距的x值保证色块宽度一致 x_indices = [1,2,3,4] # 自定义x轴刻度显示原数值 x_tick_vals = x_indices x_tick_text = [10,20,30,60] z1 = [0.25,0.50,0.75,1.0] z = [z1] y = ['blah1'] fig = go.Figure(data=go.Heatmap(z=z, x=x_indices, y=y, colorscale='turbo', zmin=0, zmax=1.2)) fig.update_layout( template="plotly_dark", width=500, height=500, paper_bgcolor="rgb(37,37,38)", margin=dict(l=10, r=10, t=20, b=20), xaxis=dict( tickmode='array', tickvals=x_tick_vals, ticktext=x_tick_text ) ) fig.show()
补充说明
两种方式都能实现等宽色块效果,选择哪种取决于你是否需要x轴具备数值轴的交互特性(比如缩放、数值范围选择等)。
内容的提问来源于stack exchange,提问作者Sal Dasgupta
相关产品推荐
相关产品推荐

