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

如何将Plotly Express热力图改为共享轴和色条的等高线图?

解决方案:将Plotly热力图转为共享坐标轴与颜色条的等高线图

直接替换px.imshow为px.contour无法生效的核心原因是:Plotly Express的contour不支持像imshow那样直接传入三维数组生成分面,它需要长格式(long-form)的DataFrame作为输入,同时显式指定x、y、z维度以及分面字段。

以下是修改后的完整代码,实现共享坐标轴和颜色条的等高线图:

import pandas as pd
import numpy as np
import plotly.express as px

# 创建坐标序列
x = np.linspace(-1, 1, 6)
y = np.linspace(-1, 1, 6)
n_channel = [1, 2, 3, 4]

# 生成网格坐标
xx, yy = np.meshgrid(x, y)

# 将多通道数据整理为长格式DataFrame
df_list = []
for n in n_channel:
    z = np.random.randn(len(y), len(x))
    # 扁平化网格与z值,绑定通道标识
    temp_df = pd.DataFrame({
        'x': xx.flatten(),
        'y': yy.flatten(),
        'z': z.flatten(),
        'n_channel': n
    })
    df_list.append(temp_df)

# 合并所有通道数据
df = pd.concat(df_list, ignore_index=True)

# 创建等高线图,配置共享属性
fig = px.contour(
    df,
    x='x',
    y='y',
    z='z',
    facet_col='n_channel',  # 按通道分面
    coloraxis='coloraxis',  # 强制所有分面共享同一颜色条
    title='共享坐标轴与颜色条的多通道等高线图'
)

# 显式设置坐标轴共享(确保所有分面轴范围、刻度一致)
fig.update_xaxes(matches='x')
fig.update_yaxes(matches='y')

# 自定义分面标题
for idx, channel in enumerate(n_channel):
    fig.layout.annotations[idx].update(text=f'n_channel: {channel}')

# 统一配置颜色条样式
fig.update_layout(coloraxis_colorbar=dict(title='Z值'))

fig.show()

关键配置说明:

  • 数据格式转换:将每个通道的网格坐标(xx、yy)和z值扁平化后,与通道标识合并为长格式DataFrame,这是px.contour要求的标准输入格式。
  • 共享颜色条:通过coloraxis='coloraxis'参数,让所有分面使用同一个颜色条,保证数值映射的一致性。
  • 共享坐标轴:update_xaxes(matches='x')和update_yaxes(matches='y')确保所有分面的x、y轴范围和刻度完全同步,避免分面间轴显示不一致的问题。
  • 自定义分面标注:替换默认的分面标题为更清晰的通道标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:19