матрица путаницы в виде столбчатой ​​диаграммы с ggplot2 - PullRequest
3 голосов
/ 13 января 2020

У меня есть запутанная матрица, которую я хочу построить в виде гистограммы с накоплением с ggplot2.

# confusion matrix
conf <- structure(c(3015, 672, 874, 3217, 0.224736436101826, 0.1727950629982
), .Dim = 2:3, .Dimnames = list(c("FALSE", "TRUE"), c("FALSE", 
"TRUE", "class.error")))

conf
#       FALSE TRUE class.error
# FALSE  3015  874   0.2247364
# TRUE    672 3217   0.1727951

Я попытался изменить ее, используя tidyr:

conf <- as.data.frame(rf$confusion)
conf$actual <- row.names(conf)
conf <- tidyr::pivot_longer(conf, c(`FALSE`, `TRUE`))
conf$prediction <- conf$name

и затем построение графика с использованием:

ggplot(conf, aes(x = actual, fill = prediction)) + geom_bar(position = "fill")

фактический результат:

enter image description here


Но есть несколько проблем:

  1. Столбики должны иметь высоту в соответствии со столбцом value моей матрицы путаницы
  2. Цвета должны обозначать green для правильно предикатной детали и red для неправильно предикатной часть

Как я могу решить эту проблему?


Любая помощь также в упрощенных подходах приветствуется ..

Ответы [ 2 ]

4 голосов
/ 13 января 2020

Загрузка пакетов

library(tidyverse)

Тогда это ваша матрица.

conf <- structure(c(3015, 672, 874, 3217, 0.224736436101826, 0.1727950629982
), .Dim = 2:3, .Dimnames = list(c("FALSE", "TRUE"), c("FALSE", 
                                                      "TRUE", "class.error")))

conf %>% # take the matrix then
    as.data.frame() %>% # convert it into a dataframe
    select(-class.error) %>% # remove the class.error column
    mutate(actual = rownames(.)) %>% # make the rownames a column
    gather(key = "predicted", value = "obs", -actual) %>% # put the data into a long format
    ggplot(aes(actual, obs, fill = predicted)) + # plot with these aesthetics
    geom_bar(stat = "identity")

Важна часть stat = "identity", поскольку ggplot в противном случае ищет количество строк, но вам нужно число в строках.

4 голосов
/ 13 января 2020

По умолчанию geom_bar () рассчитывает статистику, то есть подсчитывает количество ИСТИНА / ЛОЖЬ, что дает 1: 1. Таким образом, вы можете использовать вместо geom_col () или geom_bar (stat = "identity")

Попробуйте что-то вроде этого:

g <- data.frame(conf[,1:2]) %>% 
tibble::rownames_to_column("observed") %>% 
pivot_longer(-observed,names_to = "predicted") %>% 
ggplot() + geom_col(aes(x=observed,y=value,fill=predicted))
print(g)

plot

Для действительно красного / зеленого:

#set the colors
# note you have FALSE. and TRUE. in your matrix
COLS = c("TRUE."="green","FALSE."="red")
g + scale_fill_manual(values = COLS)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...