Стержень с опорой ggplot2 в R

#r #pivot #stacked-chart

#r #сводный #график с накоплением

Вопрос:

У меня есть такая таблица: dput данных

 dput(data)
structure(list(status = c("Recovered", "Dead", "On-Treatment"
), northern_countries = c(24130778L, 955048L, 15634207L), Southern_countries = c(9157967L, 
308243L, 726474L)), class = "data.frame", row.names = c(NA, -3L
))

        status northern_countries Southern_countries
1    Recovered           24130778            9157967
2         Dead             955048             308243
3 On-Treatment           15634207             726474

  

Я хотел бы создать столбчатый график, который показывает процент погибших, восстановленных и обработанных, 2 столбика которых являются northern_countries и southern_countries.

Я искал вокруг, но не мог найти ответ: (Кроме того, я только начал с R, поэтому, пожалуйста, если бы вы могли разъяснить детали, я был бы очень признателен.

Большое спасибо xoxo

Комментарии:

1. Хотя вы не включили, ясно, что вам нужно pivot_longer ваши данные (последние 2 столбца) перед созданием диаграммы

2. data %>% pivot_longer(cols = c(northern_countries, Southern_countries), names_to= "countries", values_to = "value") %>% ggplot(aes(x=status, y=value)) geom_col(aes(fill= countries), position = "dodge") попробуйте это

3. Помните, что в R данные, которые будут нанесены на одну ось, должны быть только в одном столбце. Это не похоже на MS Excel, где данные по двум столбцам могут быть нанесены на одну ось.

Ответ №1:

Использование ggplot2:

Скажем df , это имя вашего фрейма данных, сначала вам нужно преобразовать его в длинный формат с pivot_longer() помощью из tidyr пакета:

 df <- tidyr::pivot_longer(df, cols=-1)
  

Obs: -1 не будет преобразовывать первую строку в long. Тогда это должно выглядеть примерно так (извините за плохое качество):

введите описание изображения здесь

Итак, мы хотим name , чтобы столбец располагался по оси x (по одному столбцу для каждого значения в нем), value в y, и каждый столбик должен быть разделен по цветам на status , поэтому мы передаем его в fill :

 library(ggplot2)

ggplot(df, aes(x=name, y=value, fill=status)   geom_col()