Основываясь на ggplot2 , мне интересно, как я могу визуализировать межквартильный диапазон для каждой группы (Тип), где плотности каждой группы представлены в виде одной большой цифры, как показано ниже:
На этом текущем рисунке точки представляют значения x, соответствующие максимальному значению y, где минимальные / максимальные значения серой линии представляют 2,5% и 97,5% квантиль с каждой группы.
Здесь на каждом графике у меня есть три точки, которые являются максимумами в трех группах.
ОДНАКО, мне нужно иметь только одну точку (одно значение x) для каждой группы, и я заблудился отсюда.
Пожалуйста, помогите мне!
На всякий случай я приложил код, который может воспроизвести фигуру.
my_data <- data.frame(mean = c(0.04, 0.015, -0.04),
stdev = c(0.019, 0.019, 0.02),
Type = factor(c("A",
"B",
"C")))
# points at which to evaluate the Gaussian densities
x <- seq(-0.1, 0.1, by = 0.001)
# build list of Gaussian density vectors based on means and standard deviations
pdfs <- mapply(dnorm, mean = my_data$mean, sd = my_data$stdev, MoreArgs = list(x = x),
SIMPLIFY = FALSE)
# add group names
names(pdfs) <- my_data$Type
# convert list to dataframe
pdfs <- do.call(cbind.data.frame, pdfs)
# Summary stat
x.com <- data.frame(pdfs, x)
sum_stat <- matrix(NA, ncol = 7, nrow = 3)
for (i in 1:3){
sum_stat[i,1] <- min(x.com[,4][x.com[,i]==quantile(x.com[,i], probs=.025)])
sum_stat[i,2] <- quantile(x.com[,i], probs=.025)
sum_stat[i,3] <- x.com[,4][x.com[,i]==max(x.com[,i])]
sum_stat[i,4] <- max(x.com[,i])
sum_stat[i,5] <- max(x.com[,4][x.com[,i]==quantile(x.com[,i], probs=.975)])
sum_stat[i,6] <- quantile(x.com[,i], probs=.975)
}
sum_stat <- data.frame(sum_stat)
sum_stat[,7] <- colnames(x.com)[1:3]
sum_stat[,7] <- as.factor(sum_stat[,7])
colnames(sum_stat) <- c("left", "left_val", "max", "max_val", "right", "right_val", "variable")
sum_stat
# convert dataframe to tall format
# library(tidyr)
pdfs$x <- x
tall_df <- gather(pdfs, Type, density, -x)
tall_df$Type
tt <- transform(tall_df,
Type=factor(Type,levels=c("A",
"B",
"C")))
ggplot(tt, aes(x = x, y = density, fill = Type, color = Type)) +
geom_line() +
geom_point(inherit.aes = FALSE,
data = sum_stat,
aes(x = max, y = 0, alpha=0.4),
show.legend = FALSE) +
geom_errorbarh(inherit.aes = FALSE,
data = sum_stat,
aes(xmin = left, xmax = right, y = 0, alpha=0.4),
height = 0.1, show.legend = FALSE) +
facet_wrap(~ Type, ncol = 1) +
theme(strip.background = element_blank(),
strip.text.x = element_blank())