You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:36