Панель ошибок на хлайне в 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)

Вам все еще нужно вручную добавить каждую строку (и сгенерировать данные для ленты), но если ваши входные наборы данных для этого согласованы, вы, вероятно, также можете автоматизировать это.

Другие вопросы по тегам