Как вручную изменить легенду ggplot2, чтобы включить v-линии?

#r #ggplot2

Вопрос:

Я потратил на это немного времени, переходя от одной кроличьей норы к другой. Я хотел бы построить график этих данных.

 
df <- data.frame(value = c(80,75,50,60,5,91,68,50,40,50),
                 event = c("a","b","c","d","e","a","b","c","d","e"), cell = c("A","A","A","A","A","B","B","B","B","B"))


 

Это настолько близко, насколько я приблизился к сюжету, который я хотел бы :

 lines <- data.frame(intercepts = c("b","d"), names = c('treatment1','treatment2'))

ggplot(df, aes(x=event , y=value, group = cell, color =cell))   
  geom_line(aes(linetype=cell), size =1)  
  geom_point(aes(shape=cell), size = 2)  
  theme(panel.grid = element_blank(), 
        legend.key = element_rect(fill="white"),
        legend.title = element_blank(),
        panel.background = element_blank()) 
  geom_vline(data = lines, aes(xintercept = intercepts, color = names, linetype = names))  
  scale_color_manual(values = c("A" = "red", "B" = "blue", "treatment1" = "green", "treatment2" = "purple"))  
  scale_linetype_manual(values = c("A" = "solid", "B" = "solid", "treatment1" = "dashed","treatment2"="dashed"))  
  scale_shape_manual(values = c("A" = 18, "B" = 20, "treatment1" = 1, "treatment2"= 1)) 
 

Ggplot

Единственная проблема в том, что легенда не похожа на сюжетные линии. A и B должны выглядеть так введите описание изображения здесьв легенде, в то время как обработка 1 и обработка 2 должны быть вертикальными, пунктирными и иметь соответствующие цвета.

Ответ №1:

Я не уверен, но, пожалуйста, проверьте это. Пожалуйста, дайте мне знать, если тип строки для B должен быть сплошным или т. Д.

 ggplot(df, aes(x=event , y=value, group = cell, color =cell))   
  geom_line(aes(linetype=cell), size =1)  
  geom_point(aes(shape=cell), size = 2)  
  theme(panel.grid = element_blank(), 
        legend.key = element_rect(fill="white"),
        legend.title = element_blank(),
        panel.background = element_blank()) 
  geom_vline(data = lines, aes(xintercept = intercepts, color = names, linetype = names), show.legend = F)  
  scale_color_manual(values = c("A" = "red", "B" = "blue", "treatment1" = "green", "treatment2" = "purple"),
                     guide = guide_legend(override.aes = list(
                       linetype = c(1,3,3,3), #HERE
                       shape = c(19, 17, NA, NA)
                     )))  
  guides(shape = "none", linetype = "none")
 

введите описание изображения здесь

Комментарии:

1. Проблема все еще в том, что легенда на самом деле не соответствует линиям. В A B должны быть сплошные и пунктирные линии как часть их условных обозначений соответственно. Обработка 1 и обработка 2 также не должны содержать горизонтальных линий в своих легендах. Мне интересно, добавляет ли кто-нибудь из других геомов эти проблемы в легенду. Сейчас я ищу эстетику, которая отключает отображение геом в легенде.

2. @pabstack Ах как treatment1 и treatment2 не должно было быть пунктирной линии. Это можно решить. Пожалуйста подождите.

3. @pabstack Я редактирую свой код. В приведенном выше коде вы можете найти тип строки для treatment в #HERE строке scale_color_manual детали.

4. Эй, вот оно что! Спасибо! Прошлой ночью я действительно был на пределе своих возможностей с этим. Я ценю вашу помощь.