Панель ошибок на хлайне в ggolot
У меня есть немного сложный сюжет, созданный с помощью ggplot2; с осью X, имеющей имена каждой точки, и осью Y, имеющей их значения. Я использовал geom_point для их представления. Я также добавил панели ошибок для каждой точки на графике.
Теперь я наложил график, который использует только geom_hline с разными типами линий для представления выборок в этих данных (это фрейм данных, отличный от первого, но с общими осями X и Y). Я хотел бы показать отклонения на этих линиях, и я ищу вдохновение в том, как изобразить отклонения на линиях.
Я пытался добавить панели ошибок, но затем они появляются как дополнительные образцы на Xaxis, что не идеально. Это осуществимая идея в первую очередь?
Вот как это выглядит со стрелками, линии ошибок отображаются в виде дополнительных точек на оси X.
Редактировать: фрагмент кода, если он служит вдохновением для кого-то, кто пытается что-то подобное
p <- ggplot(df_sample_dots, aes(x=Names, y=Values), show.legend = TRUE) + geom_point(size=5, aes(color=factor(Names))) +
geom_errorbar(aes(ymin=Values-dev, ymax=Values+dev), width=.2, position=position_dodge(.9), color="black")
p <- p + geom_hline(aes(yintercept=Values, linetype=Names), data=df_sample_hlines, show.legend = TRUE, color="black") +
geom_errorbar(aes(ymin=Values-dev, ymax=Values+dev), data = df_sample_hlines, color="thistle4", width=1, size=1)
1 ответ
Как насчет чего-то вроде этого:
library(ggplot2)
library(dplyr)
set.seed(12345)
toPlot <-
data.frame(
group = factor(sample(LETTERS[1:10],1000,TRUE))
) %>%
mutate(value = rnorm(1000) +
as.numeric(group)/10)
basePlot <-
ggplot(toPlot) +
stat_summary(aes(x = group
, y = value)
, fun.data = mean_cl_normal) +
theme_minimal()
basePlot
lineAdd <-
data.frame(
x = range(as.numeric(toPlot$group)) + c(-.5,.5)
, ymax = 1.2
, ymin = 0.8
)
basePlot +
geom_ribbon(
data = lineAdd
, mapping = aes(x = x
, ymax = ymax
, ymin = ymin)
, col = "light gray"
, alpha = 0.2
) +
geom_hline(yintercept = 1)
Вам все еще нужно вручную добавить каждую строку (и сгенерировать данные для ленты), но если ваши входные наборы данных для этого согласованы, вы, вероятно, также можете автоматизировать это.