#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:
- Приведите свои данные в длинном формате с
pivot_longer
tidyr
помощью пакета from (он находится внутриtidyverse
). - сюжет с
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))