Как добавить график ggpubr на другой график? - Р - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь дополнить мою таблицу ggdotchart стандартным отклонением от среднего, однако я не могу сделать это эстетически приятным способом.Поэтому мне нужно изменить порядок слоев, но я не могу заставить его работать.

library(ggpubr)

  # Load data
  data("mtcars")
  dfm <- mtcars
  # Convert the cyl variable to a factor
  dfm$cyl <- as.factor(dfm$cyl)
  # Add the name colums
  dfm$name <- rownames(dfm)


  ggdotchart(dfm, x = "name", y = "mpg",
             color = "cyl",                                # Color by groups
             palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette
             sorting = "descending",                       # Sort value in descending order
             add = "segments",                             # Add segments from y = 0 to dots
             rotate = TRUE,                                # Rotate vertically
             group = "cyl",                                # Order by groups
             dot.size = 6,                                 # Large dot size
             label = round(dfm$mpg),                        # Add mpg values as dot labels
             font.label = list(color = "white", size = 9, 
                               vjust = 0.5),               # Adjust label parameters
             ggtheme = theme_pubr()                        # ggplot2 theme
  ) + geom_errorbar(aes(x = name, ymin = mpg - sd(mpg), ymax = mpg + sd(mpg)), position = "identity")

Это приводит к появлению панели ошибок над точками, в то время как я хочу, чтобы она находилась за точками.Я пытался перевернуть слои, но не смог заставить его работать.В обычном ggplot это просто изменение порядка, однако пакет затрудняет это.

1 Ответ

1 голос
/ 14 мая 2019

Хотя мне нравится ответ в ссылке, я думаю, что он делает немного ненужных осложнений.Мы можем сохранить график в любом порядке, а затем изменить его, вместо того, чтобы объединить различные geoms с нашим графиком.

g$layers[c(4,1,2,3)] -> g$layers

Где g - это ваш график, а первые три слоя относятся к ggdotchart.


Для завершения:

Если вы хотите использовать решение, предложенное в вопросе, связанном в комментариях, это будет:

 g$layers <- c(geom_errorbar(aes(x = name, ymin = mpg - sd(mpg), ymax = mpg + sd(mpg)), 
                             position = "identity"), 
               g$layers)

Здесь g является ggdotchart частью вашего кода без geom_errorbar.

...