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

Plotly中带归一化的混淆矩阵自定义红-绿中心色阶实现

解决混淆矩阵的红-绿中心渐变颜色映射问题

你的核心问题是颜色映射的刻度定位错误:原代码中用np.min(abs(custom_cf_matrix)) / np.max(abs(custom_cf_matrix))标记白色(0值)的位置,但这个比例和0在数据实际范围中的位置无关,导致颜色渐变没有以0为中心。另外代码中group_names未定义,会引发报错。

修正后的完整代码

import plotly.express as px
import numpy as np

# 定义颜色
zero_color = 'white'
positive_color = 'green'
negative_color = 'red'

# 混淆矩阵数据
custom_cf_matrix = np.array([[395, -5], [-200, 20]])

# 计算数据范围,确定0在颜色刻度中的相对位置
min_val = np.min(custom_cf_matrix)
max_val = np.max(custom_cf_matrix)
zero_pos = (0 - min_val) / (max_val - min_val)  # 0值对应的颜色刻度比例

# 构建正确的颜色映射刻度:负→白→正
colors = [
    (0, negative_color),
    (zero_pos, zero_color),
    (1, positive_color)
]

# 修复标签生成逻辑(补上缺失的group_names示例)
group_names = ["TN", "FP", "FN", "TP"]
group_values = [395, -5, -200, 20]
labels = [f"{v1}\n{v2}" for v1, v2 in zip(group_names, group_values)]
labels = np.asarray(labels).reshape(2, 2)

# 创建混淆矩阵图
fig = px.imshow(
    custom_cf_matrix,
    labels={"x": "预测标签", "y": "真实标签"},
    color_continuous_scale=colors,
    range_color=[min_val, max_val],
    width=500,
    height=500,
)

fig.update_xaxes(side="bottom")
fig.update_yaxes(side="left")

# 添加标注
annotations = [
    dict(
        text=text,
        x=col,
        y=row,
        font=dict(color="black", size=16),
        showarrow=False,
        xanchor="center",
        yanchor="middle",
    )
    for row in range(2)
    for col, text in zip(range(2), labels[row])
]

fig.update_layout(
    title="带值权重的混淆矩阵",
    title_x=0.5,
    annotations=annotations,
)

fig.update_xaxes(tickvals=[0, 1], ticktext=["0", "1"], showticklabels=True)
fig.update_yaxes(tickvals=[0, 1], ticktext=["0", "1"], showticklabels=True)

fig.show()

关键修正点

  • 颜色刻度定位:通过zero_pos = (0 - min_val)/(max_val - min_val)计算0值在整个数据范围中的相对比例,确保白色准确对应0值。
  • 修复未定义变量:补上group_names示例,避免运行报错。
  • 优化标题居中:将title_x设为0.5,实现标题水平居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:32