R ggplot2 столбчатая диаграмма с накоплением, x как.фактор (время), fill = c(среднее значение E, среднее значение T, среднее значение P)
Я пытаюсь создать сложенный барный сюжет, но безуспешно. К сожалению, я не могу понять, как разместить фрейм данных, и я новый пользователь, поэтому не могу публиковать изображения. Я дал макет данных ниже. Я хотел бы построить графики с привязкой по местоположению, где x as.factor(Time), Y как%, со столбцами нужно соединить по группам и заполнить средним значением каждого E,T,P, показывая стандартные полосы ошибок. Хотя мне повезло, когда я строил отдельные значения в виде точек, я не могу строить их в виде столбцов с накоплением. Ценю помощь.
Location Group Time Mean E Mean T Mean P SE E SE T SE P
Farm T 48 0.52 0.02 0.47 0.29 0.07 0.29
Farm C 48 0.37 0.03 0.61 0.28 0.09 0.28
Farm T 24 0.59 0.01 0.40 0.28 0.06 0.28
Farm C 24 0.56 0.01 0.43 0.29 0.05 0.29
Farm T 0.5 0.56 0.01 0.43 0.29 0.04 0.29
Farm C 0.5 0.35 0.01 0.64 0.28 0.05 0.28
Pristine T 48 0.46 0.03 0.52 0.29 0.10 0.29
Pristine C 48 0.43 0.02 0.55 0.29 0.08 0.29
Pristine T 24 0.43 0.02 0.55 0.29 0.08 0.29
Pristine C 24 0.26 0.04 0.71 0.25 0.11 0.26
Pristine T 0.5 0.52 0.03 0.45 0.29 0.09 0.29
Pristine C 0.5 0.33 0.03 0.65 0.27 0.09 0.28
1 ответ
Пытаться:
dput(dat)
structure(list(Location = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Farm", "Pristine"), class = "factor"),
Group = structure(c(2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L), .Label = c("C", "T"), class = "factor"), Time = c(48,
48, 24, 24, 0.5, 0.5, 48, 48, 24, 24, 0.5, 0.5), `Mean E` = c(0.52,
0.37, 0.59, 0.56, 0.56, 0.35, 0.46, 0.43, 0.43, 0.26, 0.52,
0.33), `Mean T` = c(0.02, 0.03, 0.01, 0.01, 0.01, 0.01, 0.03,
0.02, 0.02, 0.04, 0.03, 0.03), `Mean P` = c(0.47, 0.61, 0.4,
0.43, 0.43, 0.64, 0.52, 0.55, 0.55, 0.71, 0.45, 0.65), `SE E` = c(0.29,
0.28, 0.28, 0.29, 0.29, 0.28, 0.29, 0.29, 0.29, 0.25, 0.29,
0.27), `SE T` = c(0.07, 0.09, 0.06, 0.05, 0.04, 0.05, 0.1,
0.08, 0.08, 0.11, 0.09, 0.09), `SE P` = c(0.29, 0.28, 0.28,
0.29, 0.29, 0.28, 0.29, 0.29, 0.29, 0.26, 0.29, 0.28)), .Names = c("Location",
"Group", "Time", "Mean E", "Mean T", "Mean P", "SE E", "SE T",
"SE P"), class = "data.frame", row.names = c(NA, -12L))
# maybe there is an easier way to do this merge?
library(data.table)
dat_m1 <- setDT(melt(dat[,1:6],id=c('Group','Time','Location')))
dat_m2 <- setDT(melt(dat[,c(1:3,7:9)],id=c('Location','Time','Group')))
dat_m1$var_group <- sapply(as.character(dat_m1$variable),function(x) unlist(strsplit(x, ' '))[2])
dat_m2$var_group <- sapply(as.character(dat_m2$variable),function(x) unlist(strsplit(x, ' '))[2])
setkey(dat_m1,Time,Location,Group,var_group)
setkey(dat_m2,Time,Location,Group,var_group)
dat_m <- merge(dat_m1,dat_m2, allow.cartesian=TRUE)
# suggested alternative for clarity
mydodge <- position_dodge(width=0.8)
ggplot(dat_mm,aes(x=as.factor(Time),y=value.x, ymin=value.x-value.y,
ymax=value.x+value.y,fill=variable.x)) +
geom_bar(stat='identity', position=mydodge, width=0.7) +
geom_errorbar(position=mydodge,width=0.2,stat='identity') +
facet_grid(Location ~ Group)