Моя проблема заключается в том, что я хочу изменить порядок факторов в выводе ggplot, полученном с использованием geom_bar(position = "fill"
), чтобы наибольшая доля положительного класса была ближе всего к оси Y.Мне удалось найти рабочее решение, но из моих исследований кажется, что есть более эффективное решение, хотя я не могу его найти.
Я прочитал вопрос Порядок баров вгистограмма ggplot2 , но я не могу найти решение для упорядочения по пропорциям, то есть по значениям, которые явно не присутствуют во фрейме данных, но являются сводной статистикой.
У меня естьвзглянул на раздел Порядок модифицирующего фактора в книге, R для Data Science , и предлагается решение, в котором создается сводный фрейм данных со столбцом «prop» и линейным графиком, созданным из этих значений с использованиемfct_reorder2()
.Однако я не могу применить подобную логику к «заполненной» гистограмме.
Решение, на которое я наконец наткнулся, пришло из этого источника # 267 ЗАПИСЬ ПЕРЕМЕННОЙ В GGPLOT2 , посредством чегоВы просто устанавливаете новые уровни факторов, используя mutate()
.Однако вместо того, чтобы самому определять порядок, я создал фрейм данных, упорядочивающий коэффициент по пропорции положительного класса.
Я хотел бы знать, есть ли более эффективный способ сделать это, возможно, в одной операции с длинным каналом?
Вот воспроизводимый пример:
library(ggplot2)
library(dplyr)
variable <- c(rep("alpha", 4),
rep("beta", 4),
rep("gamma", 4),
rep("delta", 4))
class <- c(rep("1", 4),
"1", "1", "0", "0",
rep("0", 3), "1",
rep("1", 3), "0")
dframe <- data.frame(variable, class)
plot_order <- dframe %>%
count(variable, class) %>%
group_by(variable) %>%
mutate(prop = prop.table(n)) %>%
filter(class == "1") %>%
arrange(prop)
lvls <- as.character(plot_order$variable)
dframe %>%
mutate(variable = factor(variable, levels = lvls)) %>%
ggplot(aes(x = variable, fill = class)) +
geom_bar(position ="fill") +
labs(y = "Proportion")
Вот вывод plot_order
:
# A tibble: 4 x 4
# Groups: variable [4]
variable class n prop
<fct> <fct> <int> <dbl>
1 alpha 1 4 1
2 delta 1 3 0.75
3 beta 1 2 0.5
4 gamma 1 1 0.25
И результат:
Гистограмма с упорядоченными коэффициентами, основанными на позиции "fill"
Заранее спасибо.