Оригинал поста здесь Построение нормированной диаграммы в R с использованием dplyr и pipeline
Цвета, размеры шрифтов - дело вкуса
Такая задача часто возникает в анализе данных. Давайте посмотрим ее решение на примере Toy example
Создаем данные
df = data.frame(a = sample(c('a', 'b', 'c', 'd'), 1000, replace = TRUE),
b = sample(c('x', 'y', 'zizuzi'), 1000, replace = TRUE),
c = rnorm(1000))
Загружаем необходимые библиотеки
library(dplyr) # преобразование данных library(ggplot2) # визуализация library(scales) # на диаграмме значения преобразовывает в %Далее собственно преобразование
df1 = df %>% select(a, b) %>% # выбирает только нужные нам переменные
filter(a != 'd')%>% # при необходимости удаяем ненужные уровни
mutate(b = case_when( # можем поменять уровни переменной
b == 'x' ~ 'x',
b == 'y' ~ 'y',
b == 'zizuzi' ~ "z"
) ) %>%
group_by(a,b) %>% # оставшаяся чсть пайплайна нужна для меток на диаграмме
summarise(count=n()) %>%
mutate(perc=count/sum(count))
В этом пайплайне команды filter и mutate только на тот случай, если вам нужно что-то почистить и подготовить. Фишка в основном - расчет %
Визуализация
ggplot(df1, aes( a,y = perc, fill = b)) + geom_bar(stat="identity") +
geom_text(aes(label=scales::percent(perc, accuracy = .1)) , position = position_stack(vjust = 0.5),
color="white" ,size=5) + theme(text = element_text(size=15),
axis.text.x = element_text(size=15,
angle = 80, hjust = 1, colour = 'black'),
legend.title = element_blank(),
axis.title = element_blank())
Ну и получается что-то типа
Цвета, размеры шрифтов - дело вкуса

Комментариев нет:
Отправить комментарий