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

如何在Plotly Express热力图中添加次Y轴?含重复值处理

在Plotly Express热力图中实现双Y轴并处理重复轴标签

基础双Y轴实现

Plotly Express的imshow默认生成分类Y轴,要添加第二个Y轴,需手动创建右侧叠加轴,并将热力图的每行位置与第二个Y轴的刻度对应:

import plotly.express as px
import plotly.graph_objects as go

z = [[0.5,0.5],[1,1],[0.6,0.3],[1,0.4]]
x = ["p1","p2"]
y = ["A","B","C","D"]
y2 = [1,2,3,4]

# 生成初始热力图
fig = px.imshow(z, x=x, y=y, zmin=0, zmax=1)

# 添加右侧第二个Y轴
fig.update_layout(
    yaxis2=dict(
        title="Y2轴",
        overlaying="y",
        side="right",
        # 手动指定刻度位置为热力图每行的索引(0到3)
        tickmode="array",
        tickvals=list(range(len(y))),
        # 对应索引设置Y2的刻度文本
        ticktext=y2
    )
)

fig.show()

处理Y2轴重复值的更优方案

当y2包含重复值时,若直接使用分类轴会导致重复值合并,无需修改原始数据为唯一标识,只需保持手动映射行索引到Y2值的方式即可保留所有原始标签:

import plotly.express as px
import plotly.graph_objects as go

z = [[0.5,0.5],[1,1],[0.6,0.3],[1,0.4]]
x = ["p1","p2"]
y = ["A","B","C","D"]
y2 = [1,2,2,4]  # 包含重复值

fig = px.imshow(z, x=x, y=y, zmin=0, zmax=1)

fig.update_layout(
    yaxis2=dict(
        title="Y2轴",
        overlaying="y",
        side="right",
        tickmode="array",
        # 绑定热力图每行的索引位置
        tickvals=list(range(len(y))),
        # 对应每个位置显示原始y2值,重复值不会合并
        ticktext=y2,
        tickangle=0  # 可选:调整标签角度避免重叠
    )
)

# 可选:统一Y轴范围,让刻度对齐更整齐
fig.update_yaxes(range=[-0.5, len(y)-0.5])

fig.show()

方案说明

  • 热力图的每行对应一个索引(从下到上为0到len(y)-1),通过tickvals绑定这些索引,ticktext映射为y2的原始值,即使值重复也会在对应行位置显示。
  • 无需修改y2的原始数据结构,完全保留业务含义,同时实现双Y轴的可视化需求。

内容的提问来源于stack exchange,提问作者Jean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:05:32