Исходя из моего понимания вашего кода для построения одной диаграммы Парето, вы выделяете один год, а затем выводите суммарную сумму, выраженную в процентах.
Итак, если вы хотите сделать это для нескольких лет и нескольких столбцов, вам сначала нужно перевести данные в более длинный формат (здесь я использую pivot_longer
из tidyr
, но вы можете сделать то же самое, используя melt
из data.table
).
Затем я сгруппирую ваши данные по году и по категориальной переменной «Var» (содержащую Col1, Col2, ...) и выражу значение в процентах от общей суммы и суммарной суммы в процентах. , Я также создаю счетчик, который в основном представляет собой номера строк, чтобы использовать его в качестве оси X.
Наконец, я использовал эти новые переменные для составления диаграммы и линии. Я разделил «Годы», используя facet_wrap
. В целом, вы можете написать что-то вроде этого:
dt %>% pivot_longer(., -YEAR, names_to = "Var", values_to = "Val") %>%
group_by(YEAR, Var) %>%
arrange(desc(Val), .by_group = TRUE) %>%
mutate(CumS = cumsum(Val), Count = row_number()) %>%
mutate(CumS2 = CumS*100 / sum(Val)) %>%
mutate(Val_Percent = Val*100/sum(Val)) %>%
ggplot(aes(x = as.factor(Count), y = Val_Percent, fill = Var))+
geom_col(position = position_dodge())+
facet_wrap(.~YEAR)+
geom_line(aes(y = CumS2, group = Var, color = Var), position = position_dodge(.9))+
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank())
В качестве альтернативы, если вы хотите получить диаграмму Парето для "Кол" и за "Год" ", вы можете сделать то же самое, а затем использовать facet_grid
вместо facet_wrap
:
dt %>% pivot_longer(., -YEAR, names_to = "Var", values_to = "Val") %>%
group_by(YEAR, Var) %>%
arrange(desc(Val), .by_group = TRUE) %>%
mutate(CumS = cumsum(Val), Count = row_number()) %>%
mutate(CumS2 = CumS*100 / sum(Val)) %>%
mutate(Val_Percent = Val*100/sum(Val)) %>%
ggplot(aes(x = as.factor(Count), y = Val_Percent, fill = Var))+
geom_col(position = position_dodge())+
facet_grid(Var~YEAR)+
geom_line(aes(y = CumS2, group = Var, color = Var), position = position_dodge(.9))+
theme(axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank())
Это отвечает вашему вопрос?