更改ggplot图例中的关键字母

时间:2018-02-20 19:39:19

标签: r ggplot2 legend scatter-plot legend-properties

我按如下方式生成散点图:

library(ggplot2)
library(ggrepel)

DF <- data.frame(x=runif(20,0,1), y=runif(20,0,1),group=c(rep('x',15),rep('y',5)))

for (i in 1:20)
  DF$item[i]<-paste(sample(c(letters,LETTERS),4),collapse="")

print(ggplot(DF, aes(x, y, label = item, color=group)) +
        geom_text(size = 5) +
        scale_color_manual(values=rainbow(2)) +
        theme_bw())

给出了这个图:

enter image description here

在传说中,字母'a'以红色和蓝色显示。但是,我想在小圆圈或'x'中更改'a'。

如何更改其他内容的“a”?

1 个答案:

答案 0 :(得分:2)

使用网格图形对象(grobs)的解决方案:

p <- ggplot(DF, aes(x, y, label = item, color=group)) +
        geom_text(size = 5) +
        scale_color_manual(values=rainbow(2)) +
        theme_bw()
g <- ggplotGrob(p)
g$grobs[[15]][[1]][[1]]$grobs[[4]]$label <- "O"
g$grobs[[15]][[1]][[1]]$grobs[[6]]$label <- "X"

library(grid)
grid.draw(g)

enter image description here

修改
要将任何数量的组的所有标签更改为“O”:

text_grobs <- which(sapply(g$grobs[[15]][[1]][[1]]$grobs, function(x) class(x)[1])=="text")

for (k in text_grobs) {
   g$grobs[[15]][[1]][[1]]$grobs[[k]]$label <- "O"
}