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

如何在Plotly中上下组合imshow与Scattergl图表?

如何组合Plotly的px.imshow热力图与go.Scattergl折线图?

我需要将两个Plotly图表(px.imshow生成的热力图与go.Scattergl生成的折线图)上下组合展示,单独绘制时两者均正常:

单独图表代码

imshow热力图

from plotly.subplots import make_subplots
import plotly.express as px
import plotly.graph_objects as go

fig = px.imshow(distances, color_continuous_scale='RdBu_r', origin='lower', aspect='auto', height=300)

fig.update_xaxes(showticklabels=False)
fig.update_yaxes(showticklabels=False)

Scattergl折线图

fig = go.Figure(data=go.Scattergl(
    x=ds['x'],
    y=ds['y'],
    mode='lines'
))

我期望组合成上下布局的样式,但尝试的子图代码存在问题:

尝试的问题代码

fig = make_subplots(rows=2, cols=1)

fig1 = fig.add_image(z=distances,row=1, col=1)
fig1.update_layout(coloraxis_showscale=True)
fig1.update_xaxes(showticklabels=False)
fig1.update_yaxes(showticklabels=False)

fig2 = fig.add_scattergl(x=df['x'],y=df['y'],mode='lines',row=2, col=1)
fig2.update_xaxes(showticklabels=True)
fig2.update_yaxes(showticklabels=True)

存在的问题

  • 调用fig2.update_xaxes等方法时,fig1的轴设置也会被影响
  • 第一个图表无法正常显示,也无法展示色阶

核心问题是不知道如何用子图API复现px.imshow的功能,请问如何正确组合这两个图表?


正确解决方案

核心思路

px.imshow本质是生成了Heatmap类型的trace,而非Image,所以不能用add_image,应该通过add_trace将px.imshow生成的trace导入子图,同时指定对应的行列;另外更新轴设置时要明确指定row和col,避免全局影响。

完整代码

from plotly.subplots import make_subplots
import plotly.express as px
import plotly.graph_objects as go

# 创建2行1列的子图
fig = make_subplots(rows=2, cols=1, vertical_spacing=0.1)

# 生成imshow热力图并获取其trace
imshow_fig = px.imshow(distances, color_continuous_scale='RdBu_r', origin='lower', aspect='auto')
# 将热力图trace添加到子图第1行
fig.add_trace(imshow_fig.data[0], row=1, col=1)

# 添加Scattergl折线图到子图第2行
fig.add_trace(go.Scattergl(
    x=df['x'],
    y=df['y'],
    mode='lines'
), row=2, col=1)

# 单独设置第1行的轴:隐藏刻度标签
fig.update_xaxes(showticklabels=False, row=1, col=1)
fig.update_yaxes(showticklabels=False, row=1, col=1)

# 单独设置第2行的轴:显示刻度标签
fig.update_xaxes(showticklabels=True, row=2, col=1)
fig.update_yaxes(showticklabels=True, row=2, col=1)

# 保留热力图的色阶设置
fig.update_layout(
    coloraxis=imshow_fig.layout.coloraxis,
    height=600  # 调整整体高度适配两个子图
)

fig.show()

代码说明

  1. 导入px.imshow的trace:通过imshow_fig.data[0]获取px.imshow生成的Heatmap trace,用add_trace添加到子图指定位置,完美复现原热力图的样式和色阶。
  2. 精准控制轴设置:更新轴时通过row和col参数指定目标子图,避免不同子图的轴设置互相干扰。
  3. 继承色阶配置:将原imshow图的coloraxis配置复制到子图布局中,确保色阶正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:40:24