Способ добавить скобки в dotwhisker в R без изменения форматирования подписи?

#r #ggplot2 #brackets

#r #ggplot2 #скобки

Вопрос:

У меня есть аккуратный фрейм данных с несколькими моделями, которые я строю в виде точечного графика. Ниже я воссоздал аналогичный фрейм данных. Для этого графика требуется заголовок, объясняющий информацию о предикторах, и он правильно форматируется при отсутствии скобок, но при добавлении скобок он дублируется внизу слева. Есть ли какой-нибудь способ обойти это или причина, по которой это происходит? Мне также было бы интересно поместить подпись вместо этого под легендами сюжета, но попытки использовать аннотацию и тег также привели к проблемам с форматированием. Спасибо вам за любую помощь! (Кроме того, если это выглядит странно, потому что ‘model’ и ‘term’ уже совпадают, проблема в реальном коде связана со стандартизацией некоторых имен модели для получения правильных цветов, но здесь это не должно быть проблемой).

 results_df <- data.frame(
  model = c("Model 1","Model 1","Model 1","Model 1","Model 1", "Model 1",             
            "Model 2",  "Model 2",   "Model 2",  
            "Model 2",   "Model 2",   "Model 2",  
            "Model 3", "Model 3", "Model 3",
            "Model 3", "Model 3", "Model 3",
            "Model 2",   "Model 2",   "Model 2",  
            "Model 2",   "Model 2",   "Model 2",  
            "Model 2",   "Model 2",   "Model 2"),
  estimate = c(-0.4890,  0.0966, -0.0911, -0.1700,  0.3620,  0.1980, -2.0920,
               -1.1620, -1.6910,-1.5320, -0.8340, -1.4350,  0.8240,  0.9750,
               0.9650, 0.5210,  0.9190,  0.9560, -0.9580, -0.1950, -1.1470, 
               -2.6430,-1.7420, -2.2500, -2.9990, -1.8100, -1.8270),
  conf.low = c(-0.6,  0.0, -0.2,-0.6,  0.0, -0.2, -2.4, -1.8, -1.9, -2.4,
               -1.8, -1.9,  0.0,  0.0,  0.0,  0.0,  0.0,0.0, -3.0, -2.0,
               -1.9, -5.6, -3.6, -3.8, -3.0, -2.0, -1.9),
  conf.high = c(0.9, 1.1, 1.0, 0.9, 1.1, 1.0, 0.0, 0.5, 0.7, 0.0, 0.5, 0.7,
                0.9, 1.1, 1.0, 0.9, 1.1, 1.0, 0.0, 0.5, 0.7, 0.0,0.5, 0.7,
                0.0, 0.5, 0.7),
  term = c("A","B","C","A","B","C","A","B","C","A",
           "B","C","A","B","C","A","B","C","D","E",
           "F","G","H","I","J","K",
           "L"),
  fixed = c("Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects",
            "With Fixed Effects",    "With Fixed Effects",    "With Fixed Effects",   
            "Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects",
            "With Fixed Effects",    "With Fixed Effects",    "With Fixed Effects",   
            "Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects",
            "With Fixed Effects",    "With Fixed Effects",    "With Fixed Effects",   
            "Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects",
            "Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects",
            "Without Fixed Effects", "Without Fixed Effects", "Without Fixed Effects"),
  type = c("Model 1",              "Model 1",              "Model 1",             
           "Model 1",          "Model 1",              "Model 1",             
           "Model 2",  "Model 2",   "Model 2",  
           "Model 2",   "Model 2",   "Model 2",  
           "Model 3", "Model 3", "Model 3",
           "Model 3", "Model 3", "Model 3",
           "Model 2",   "Model 2",   "Model 2",  
           "Model 2",   "Model 2",   "Model 2",  
           "Model 2",   "Model 2",   "Model 2")
)
#recode model
results_df$model = results_df$type
#graph with all elements
full_graph = dwplot(results_df,
                    vline = geom_vline(xintercept = 0, colour = "grey60", linetype = 2), 
                    dot_args = list(aes(shape = fixed)),
                    whisker_args = list(aes(colour = type)))
#add aesthetics to graph
full_graph = full_graph  
  theme_bw()  
  theme(legend.justification=c(.02, .993),
        legend.background = element_rect(color="gray90"),
        plot.title = element_text(hjust = 0.52),
        plot.caption = element_text(size=8, hjust = 0))   
  xlab("Coefficient Estimate")  
  geom_vline(xintercept = 0, colour = "grey60", linetype = 2)  
  ggtitle("Graph Title")  
  scale_color_manual(name="Model",values=c("#52D871","#17D0E5","#EF5B3D"),
                     na.translate = F) 
  scale_shape_manual(name = "Shape",values=c(16,17,16,17,16,17), na.translate = F) 
  scale_fill_manual(name="Model",values = c("#52D871","#17D0E5","#EF5B3D"),
                    na.translate = F) 
  labs(caption = "Note:
- notes about predictors
- additional notes
- additional notes
- additional notes
")
#look at graph, no formatting issues
full_graph
  

График после скобок

 #add brackets
brackets = list(c("Bracket 1", "A", "C"), 
                c("Bracket 2", "D", "F"),
                c("Bracket 3", "G", "I"),
                c("Bracket 4","J","L"))
full_plot = full_graph %>% add_brackets(brackets)
#look at graph -- caption formatting now weird
full_plot[1]