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

绘制90类混淆矩阵时数值重叠,如何调整坐标轴标签间距?

嘿,这个问题我太熟了——90类的混淆矩阵简直是布局噩梦,标签挤在一起、内部数值重叠都是常有的事儿。下面给你几个实操性强的解决方案,分工具给你拆解:

方案1:Matplotlib手动精细化调整

Matplotlib虽然需要手动调参数,但灵活性最高,适合精准控制布局:

  • 先放大画布,给标签留足空间
    90类的矩阵首先得把画布尺寸拉够,不然再怎么调都挤:

    import matplotlib.pyplot as plt
    from sklearn.metrics import confusion_matrix
    
    # 假设你已经有真实标签y_true和预测标签y_pred
    cm = confusion_matrix(y_true, y_pred)
    # 20x20是起步,根据你的标签长度可以再调大到25x25
    plt.figure(figsize=(20, 20))
    plt.imshow(cm, cmap='Blues')
    
  • 旋转+缩小标签,增大轴间距
    横向标签旋转90度是避免重叠的关键,同时调小字体、增加标签和轴的距离:

    # 调整x轴标签:旋转90度,缩小字体,设置对齐方式
    plt.xticks(range(90), [f'Class {i}' for i in range(90)], 
               rotation=90, fontsize=8, ha='center', va='top')
    # y轴标签保持横向,调整右对齐避免和矩阵重叠
    plt.yticks(range(90), [f'Class {i}' for i in range(90)], 
               fontsize=8, ha='right')
    
    # 增加标签与轴的间距,彻底避免挤在一起
    plt.tick_params(axis='x', pad=10)
    plt.tick_params(axis='y', pad=10)
    
  • 优化内部数值显示,只保留关键信息
    90类矩阵里很多数值是0,只显示非零值能大幅减少重叠:

    # 遍历矩阵添加数值文本,只显示非零值,同时调小字体
    for i in range(cm.shape[0]):
        for j in range(cm.shape[1]):
            if cm[i,j] != 0:
                plt.text(j, i, cm[i,j], ha='center', va='center', fontsize=6)
    
  • 自动调整布局
    最后用tight_layout()让Matplotlib自动优化元素位置:

    plt.tight_layout()
    plt.show()
    
方案2:Seaborn Heatmap一键简化调整

Seaborn的heatmap封装了很多布局逻辑,比Matplotlib省心:

import seaborn as sns

plt.figure(figsize=(22, 22))
# annot=True显示数值,fmt='d'表示整数格式,annot_kws直接控制标注字体大小
ax = sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
                 xticklabels=[f'Class {i}' for i in range(90)],
                 yticklabels=[f'Class {i}' for i in range(90)],
                 annot_kws={"size": 6})

# 调整标签样式和间距
ax.set_xticklabels(ax.get_xticklabels(), rotation=90, fontsize=8, ha='center', pad=12)
ax.set_yticklabels(ax.get_yticklabels(), fontsize=8, va='center', pad=12)

plt.tight_layout()
plt.show()
进阶方案:交互式可视化彻底解决重叠

如果静态图怎么调都挤,试试Plotly的交互式热图——鼠标悬停就能查看具体数值,不用把所有数值都堆在图里:

import plotly.figure_factory as ff

fig = ff.create_annotated_heatmap(cm,
                                  x=[f'Class {i}' for i in range(90)],
                                  y=[f'Class {i}' for i in range(90)],
                                  annotation_text=cm,
                                  colorscale='Blues')

# 调整画布大小和标签样式
fig.update_layout(width=1200, height=1200)
fig.update_xaxes(tickangle=90, tickfont=dict(size=8))
fig.update_yaxes(tickfont=dict(size=8))

fig.show()

核心思路总结:先放大画布给元素留空间,再通过缩小字体、旋转标签减少横向挤压,最后优化内部数值显示(或用交互式工具)彻底解决重叠问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:49:44