将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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
