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

Plotly带注释热图绘制混淆矩阵时Y轴顺序受标签数据类型影响问题咨询

问题根源

Plotly的坐标轴默认会根据传入标签自动判定轴类型,不同类型的轴排序规则完全不同:

  • 数字类标签(哪怕转成字符串)会被判定为数值轴,默认从下到上按数值升序排列
  • 纯字符类标签会被判定为分类轴,默认从上到下按传入顺序排列,刚好和数值轴的方向相反,这就是两张图Y轴倒置的核心原因。

解决方法

只需要在update_layout的Y轴配置里,强制统一轴类型为分类轴,并且显式指定排序规则和顺序,不管传入的标签是什么类型,都能保持一致的显示效果。

修改后的完整代码

import numpy as np
import plotly.graph_objects as go
import plotly.figure_factory as ff

# 修正原代码遗漏的np前缀,否则会报错
confm = np.array([[10, 4,  0,  1,  0],
               [1, 20, 10,  1,  0],
               [0,  7, 30,  3,  0],
               [0,  1,  1, 40,  2],
               [1,  1,  2,  2, 50]])

def plot_matrix(confm, class_names):
    z =  np.round(confm, 2)
    class_names = [str(c) for c in class_names]  # 强制转字符串
    y_order = class_names[::-1] # 提前定义预期的Y轴顺序

    fig = ff.create_annotated_heatmap(z,
                                      colorscale='reds',
                                      x=class_names,
                                      y=y_order
                                     )

    fig.update_layout(
            title='Confusion matrix',
            width=600,
            height=600,
            margin=dict(pad=20),
            plot_bgcolor='white',
            xaxis=dict(title='Prediction',
                       type='category',
                       categoryorder='array',
                       categoryarray=class_names,
                       showticklabels = True,
                       side='bottom'),
            yaxis=dict(title='Truth',
                       type='category', # 强制为分类轴,避免自动判定类型导致逻辑差异
                       categoryorder='array', # 按指定数组排序
                       categoryarray=y_order, # 显式指定排序顺序,完全匹配传入列表
                       showticklabels=True)
                    )
    fig.show()


plot_matrix(confm, [1, 2, 3, 4, 5])
plot_matrix(confm, ['a', 'b', 'c', 'd', 'e'])

关键修改说明

  • 移除了原来冗余的tickvals、ticktext配置,换成分类轴专属的排序控制参数
  • 强制X/Y轴都为category类型,彻底屏蔽Plotly自动判定轴类型的逻辑
  • 通过categoryorder='array'和categoryarray直接指定轴的显示顺序,完全和传入列表的自定义顺序一致,不受标签数据类型影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:36:03