отображение полос ошибок на geom_points с помощью position_dodge - PullRequest
0 голосов
/ 13 июля 2020

Учитывая фрейм данных:

df1 <- data.frame(F = c(0.200, 0.200, 0.130, 0.130, 0.394, 0.394, 0.067,
                        0.067, 0.591, 0.591, 0.200, 0.200, 0.130, 0.130, 0.394),
                  lci = c(156854, 222629, 112382, 180782, 241555, 284076, 63481,
                          120508, 291506, 315274, 116201, 165269, 83254, 134403,
                          178948),
                  median = c(182955, 259094, 131078, 209884, 281751, 331179, 74039,
                             139238, 339989, 367623, 135226, 191810, 96878, 155431,
                             208302),
                  uci = c(213542, 302074, 152997, 244224, 328853, 386617, 86423,
                          161363, 396857, 429202, 158196, 223485, 113343, 180521,
                          243621),
                  mr =  c("H", "M", "H", "M", "H", "M", "H", "M", "H", "M", "H",
                          "M", "H", "M", "H"),
                  start = c("S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "M",
                           "M", "M", "M", "M"))

Я хотел бы наложить полосы ошибок. Я могу сделать это с помощью следующего кода, но полосы ошибок не совпадают по горизонтали с точками. Как сделать так, чтобы полосы погрешностей проходили через центр соответствующей точки? код:

ggplot(df1) +
    geom_point(aes(x = as.factor(F),
                   y = median/1000,
                   shape = mr, 
                   size  = start,
                   color = mr), 
               position = position_dodge(width = 0.2) )+
    geom_errorbar(aes(x = as.factor(F),
                  ymin = lci/1000,
                  ymax = uci/1000),
                  linetype = "solid",
                  width = .1,
                  position = position_dodge(width = 0.2)) +
    theme_classic()  

ссылка на сюжет

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы должны внести эстетику в часть ggplot и оставить их вне aes для geom. Затем будут нанесены полосы ошибок там, где нанесены точки. Использование слишком большого количества эстетических элементов снова затруднит сопоставление различных геометрических фигур.

Возможно, вы можете использовать вместо этого фасет.

library(ggplot2)

ggplot(df1, aes(x=factor(F), y = median/1000,shape=mr, color =mr)) +
  geom_point(position=position_dodge(width=.5)) +
  geom_errorbar(
    aes(ymin = lci/1000, ymax = uci/1000),
    width = 0.5,
    position=position_dodge(width=.5)) +
  theme_classic()

ggplot(df1, aes(x=factor(F), y = median/1000,shape=mr, color =mr)) +
  geom_point(position=position_dodge(width=.5)) +
  geom_errorbar(
    aes(ymin = lci/1000, ymax = uci/1000),
    width = 0.5,
    position=position_dodge(width=.5)) +
  facet_wrap(~start)+
  theme_classic()

0 голосов
/ 13 июля 2020

Спасибо, это полезно. По разным причинам я не хочу использовать фасеты. Можно ли использовать размер как aes ТОЛЬКО для точек в части ggplot, но не изменять размер errobars? примерно так (но не работает)

ggplot(df1, aes(x=factor(F), y = median/1000, shape = mr, color = mr, 
size = start)) + 
geom_point(position=position_dodge(width=.5)) + 
geom_errorbar( aes(ymin = lci/1000, ymax = uci/1000, size = NULL), 
width = 0.5, position=position_dodge(width=.5)) + 
theme_classic() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...