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

如何在cvms的plot_confusion_matrix中按行百分比设置色块颜色强度?

问题描述

我用R的cvms包中plot_confusion_matrix函数绘制混淆矩阵,希望每个色块的颜色强度代表行百分比(即真实类别下各预测类别的占比),而非原始计数。该函数虽有intensity_by参数可调颜色强度,但不支持行百分比选项。请问有没有解决办法?如果没有,能否用ggplot2复现近似的混淆矩阵图,并用行百分比作为颜色强度依据?

示例代码:

library(tidyverse)
library(cvms)
data(iris)

# 创建含4个类别的新分类变量
set.seed(123)  # 保证结果可重复
new_factor <- factor(sample(c("Class1", "Class2", "Class3", "Class4"), nrow(iris), replace = TRUE))

# 将新变量加入iris数据集
iris_new <- cbind(iris, New_Categorical_Var = new_factor)

subs_all <- iris_new %>%  select(Species, New_Categorical_Var)
subs_all$Species <- factor(subs_all$Species)
subs_all$New_Categorical_Var <- factor(subs_all$New_Categorical_Var)


tbl_all <- table(subs_all)
cfm_all <- as.tibble(tbl_all)

plot_confusion_matrix(cfm_all, 
                      target_col = "Species" , 
                      prediction_col = "New_Categorical_Var" ,
                      counts_col = "n")
解决方案

一、cvms包的现有局限

目前cvms::plot_confusion_matrix的intensity_by参数仅支持"count"或"probability"(整体概率,非行占比),确实没有直接设置行百分比作为颜色强度的选项,暂时无法通过该函数直接实现需求。

二、用ggplot2复现需求的混淆矩阵

我们可以先手动计算行百分比,再用ggplot2绘制混淆矩阵,具体步骤如下:

1. 计算行百分比

先对真实类别(Species)分组,计算每个预测类别在对应真实类别中的占比:

library(tidyverse)

# 基于原数据计算行百分比
cfm_with_row_pct <- cfm_all %>%
  group_by(Species) %>%
  mutate(row_pct = n / sum(n) * 100,
         # 同时保留计数和百分比的标签文本
         label_text = paste0(n, "\n(", sprintf("%.1f%%", row_pct), ")")) %>%
  ungroup()

2. 用ggplot2绘制混淆矩阵

以row_pct作为颜色映射的依据,同时在色块中显示原始计数和行百分比:

ggplot(cfm_with_row_pct, aes(x = New_Categorical_Var, y = Species)) +
  # 绘制色块,颜色由行百分比决定
  geom_tile(aes(fill = row_pct), color = "white") +
  # 添加文本标签(计数+行百分比)
  geom_text(aes(label = label_text), color = "black", size = 4) +
  # 设置颜色渐变(可根据喜好调整)
  scale_fill_gradient(low = "#f0f9e8", high = "#006d2c", name = "行百分比(%)") +
  # 调整坐标轴标签和主题
  labs(x = "预测类别", y = "真实类别", title = "混淆矩阵(颜色代表行百分比)") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
  )

代码说明

  • geom_tile的fill参数绑定row_pct,实现颜色强度随行百分比变化;
  • label_text整合了原始计数和行百分比,让每个色块的信息更完整;
  • 颜色渐变和主题可根据个人需求调整,比如更换配色方案、调整文本大小等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:41:05