Как сделать многоуровневую гистограмму с заливкой двумя числовыми переменными в R?

#r #ggplot2

Вопрос:

Я пытаюсь создать многоуровневую диаграмму в ggplot с двумя числовыми переменными в области «заливка».

У меня есть фрейм данных, который выглядит так:

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

Где SEM_NOT — эпидемиологическая неделя, n.x-смертность от болезни, а n.y — смертность от вакцинированных людей. Я смог создать сюжет с помощью Excel, но, похоже, я не могу сделать то же самое с Р. Мне нужно, чтобы что-то выглядело так:

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

Я уже пробовал это:

 mm = melt(ddf)
ggplot(mm) geom_bar(aes(x=EVTY, fill=variable, y=value), stat='identity')
 

Но у меня это не работает.

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

1. Пожалуйста, опубликуйте свои данные образца как что-то копируемое/вставляемое, а не как картинку. dput(your_data[1:10, ]) это отличный способ поделиться копируемой/вставляемой версией первых 10 строк ваших данных.

Ответ №1:

  1. Приведите свои данные в длинном формате с pivot_longer tidyr помощью пакета from (он находится внутри tidyverse ).
  2. сюжет с ggplot использованием geom_col :
 library(tidyverse)
df %>% 
    pivot_longer(
        -SEM_NOT
    ) %>% 
    ggplot(aes(SEM_NOT, value, fill=name))  
    geom_col()
 

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

Ответ №2:

Существует два типа гистограмм: geom_bar() и geom_col() . geom_bar() делает высоту полосы пропорциональной количеству случаев в каждой группе (…). Если вы хотите, чтобы высоты столбиков отображали значения в данных, используйте geom_col() вместо этого. (из https://ggplot2.tidyverse.org/reference/geom_bar.html )

Так что это, вероятно, то, что вы ищете:

 library(data.table)  # taking `melt` from this
library(ggplot2)

ddf <- data.table(sem.not = 1:30,
                  n.x = sample(5:30, 30, TRUE),
                  n.y = sample(0:3, 30, TRUE))



mm <- melt(ddf, id.vars = "sem.not", measure.vars = c("n.x", "n.y"))
ggplot(mm)  
  geom_col(aes(x = sem.not, y = value, fill = variable))