How to add a custom legend for geom_hline

最后都变了- 提交于 2020-01-02 08:50:07

问题


Using the data below, notice the legend does not properly describe 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)

Is there some way to create a custom legend that describes the geom_hline? [I'd like the legend to to have the name "Legend" with only one value labled "avg"]

Searching so, I found an example: ggplot legend showing transparency and fill color. They used scale_fill_manual, which I tried, but could not improve the legend displayed above.


回答1:


It's a bit awkward, but this seems to work:

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")

Ah, but you've included legend.title = element_blank() in there, which is why the legend is not named. Remove that to include the name.



来源:https://stackoverflow.com/questions/17092894/how-to-add-a-custom-legend-for-geom-hline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!