加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 19:31:06 所属栏目:资源 来源:网络整理
导读:我试图通过使用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=
我试图通过使用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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读