带有可变字体系列的geom_text图例

max*_*eld 6 r ggplot2

我想geom_text()根据变量让标签占用字体系列.根据ggplot2文档中的示例(向下滚动到底部),我已经这样做了(与ggplot docs示例中的相同):

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg, label=rownames(mtcars)))
p + geom_text(aes(family=c("serif", "mono")[am+1]))
Run Code Online (Sandbox Code Playgroud)

产量:

在此输入图像描述

这一切都很好和花花公子 - 但我如何获得图例中的字体系列?

use*_*650 5

它不太漂亮:您可以在该级别更改图例标签的字体系列grob(我不知道其他方法,但我希望有)。

首先添加colour美感,以便自动生成图例,然后手动设置颜色,并scale_colour_manual保持与以前一样。然后调整图例细节,以更改键中的标签和字体。

library(ggplot2)
library(grid)



p <- ggplot(mtcars, aes(x=wt, y=mpg, colour=factor(am), label=rownames(mtcars))) + 
         geom_text(aes(family=c("serif", "mono")[am+1])) + 
         scale_colour_manual(values=c('0'= "#000000FF", '1'="#000000FF"),
                             name="am") +
         theme(legend.text=element_text(size=16),
               legend.key.width=unit(2, "cm"))

g <- ggplotGrob(p)

# change labels and fonts
g$grobs[[8]]$grobs[[1]]$grobs[[4]]$label <- "mono"
g$grobs[[8]]$grobs[[1]]$grobs[[4]]$gp$fontfamily <- "mono"
g$grobs[[8]]$grobs[[1]]$grobs[[6]]$label <- "serif"
g$grobs[[8]]$grobs[[1]]$grobs[[6]]$gp$fontfamily <- "serif"

grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述