将geom_text中的图例文字颜色匹配为符号

前端之家收集整理的这篇文章主要介绍了将geom_text中的图例文字颜色匹配为符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过使用geom_text将由图例文本颜色匹配为由因子变量生成的文本的颜色.这里是一个最小的工作示例:
df <- data.frame(a=rnorm(10),b=1:10,c=letters[1:10],d=c("one","two"))
p1 <-ggplot(data=df,aes(x=b,y=a))
p1 <- p1 + geom_text(aes(label = c,color=d,fontface="bold"))
p1 <- p1 + scale_color_hue(name="colors should match",breaks=c("one","two"),labels=c("should be pink","should be blue"))
p1

我确定它是一个简单的修复.任何有关以前职位的建议或参考将有所帮助.我没有找到任何具体的东西.

解决方法

从上面的joran的评论开始,您可以直接编辑Grobs.这是一个相当难看的代码,所以很抱歉(将有一个更优雅的方式来做这个使用网格命令 – 希望有人会发布].
library(grid)

gglabcol <- 
   function(plot1) 

         {
         g <- ggplotGrob(plot1)

         # legend grobs
         g.b <- g[["grobs"]][[which(g$layout$name=="guide-Box")]]
         l <- g.b[["grobs"]][[1]][["grobs"]]

         # get grobs for legend symbols (extract colour)
         lg <- l[sapply(l,function(i) grepl("GRID.text",i))]

         # get grobs for legend labels 
         lb <- l[sapply(l,function(i) grepl("guide.label",i))]

         # get change colour of labels to colour of symbols
         for(i in seq_along(lg)) {

           lb[[i]]$gp$col <-  lg[[i]]$gp$col

           g.b[["grobs"]][[1]][["grobs"]][sapply(g.b[["grobs"]][[1]][["grobs"]],i))][[i]] <- lb[[i]]
           }

         # overwrite original legend
         g[["grobs"]][[which(g$layout$name=="guide-Box")]] <- g.b

         grid.draw(g)

         invisible(g)
     }

情节

gglabcol(p1)

猜你在找的HTML相关文章