2013-06-13 3 views
3

Используя данные ниже, обратите внимание на легенду не правильно описать geom_hline:Как добавить пользовательскую легенду geom_hline

df<-data.frame(
    points=c(.153,.144,.126,.035, .037, .039, .010,.015,.07), 
    days=gl(3,1,9,labels=c("Sun","Mon","Tues")), 
    lang=c("en","en","en","pt","pt","pt","ko","ko","ko")) 

ggplot(data=df[df$lang=="en",])+ 
    geom_point(aes(x=days,y=points),size=5,colour='cyan',show_guide=F)+ 
    geom_point(aes(x=days,y=points,colour=days),size=4,show_guide=F)+ 
    facet_wrap(~lang,ncol=1,scales="free")+ 
    xlab("")+ 
    ylab("")+ 
    scale_y_continuous(labels = percent_format())+ 
    theme(legend.position="right", 
      legend.title = element_blank(), 
      strip.text.x = element_text(size = 13, colour = 'black', angle = 0), 
      axis.text.x=element_text(angle=0, hjust=.5, vjust=0), 
      legend.position = 'none', 
      panel.background = element_rect(fill = "#545454"), 
      panel.grid.major = element_line(colour = "#757575"), 
      panel.grid.minor = element_line(colour = "#757575"))+ 
    geom_hline(yintercept=.136,color='cyan',size=2, show_guide=T) 

enter image description here

Есть ли какой-нибудь способ, чтобы создать пользовательскую легенду, которая описывает geom_hline? [Я хотел бы, чтобы легенда имела название «Легенда» только с одним значением «avg»]

Поиск, поэтому я нашел пример: ggplot legend showing transparency and fill color. Они использовали scale_fill_manual, которые я пробовал, но не смогли улучшить легенду, показанную выше.

ответ

4

Это немного неудобно, но это похоже на работу:

hline <- data.frame(yint = 0.136,lt = 'Avg') 

ggplot(data=df[df$lang=="en",])+ 
    geom_point(aes(x=days,y=points),size=5,colour='cyan')+ 
    geom_point(aes(x=days,y=points,colour=days),size=4)+ 
    facet_wrap(~lang,ncol=1,scales="free")+ 
    xlab("")+ 
    ylab("")+ 
    scale_y_continuous(labels = percent_format())+ 
    theme(legend.position="right", 
      legend.title = element_blank(), 
      strip.text.x = element_text(size = 13, colour = 'black', angle = 0), 
      axis.text.x=element_text(angle=0, hjust=.5, vjust=0), 
      legend.position = 'none', 
      panel.background = element_rect(fill = "#545454"), 
      panel.grid.major = element_line(colour = "#757575"), 
      panel.grid.minor = element_line(colour = "#757575"))+ 
    geom_hline(data = hline,aes(yintercept=yint,linetype = lt),color = "cyan",size=2,show_guide = TRUE) + 
    scale_colour_discrete(guide = "none") + 
    scale_linetype_manual(name = 'Legend',values = 1,guide = "legend") 

enter image description here

Ах, но вы включили legend.title = element_blank() в там, поэтому легенда не названа. Удалите это, чтобы включить имя.

Смежные вопросы