在 ggplot2 中使用 FontAwesome 代替点

Using FontAwesome in ggplot2 as a replacement for points

这可能是一个相当基础的东西,但我似乎找不到有意义的答案。

我正在尝试使用 R 中的 fontawesome 包将表情符号用作 ggplot2 图表中的点,但我很难弄清楚如何为每个变量分配不同的表情符号。

下面是一些示例数据(我们称数据框为 'sample'):

sample <- structure(list(month = c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 
4L, 5L, 6L), number = c(456550L, 374616L, 462086L, 436376L, 497526L, 
488574L, 119884L, 126356L, 129338L, 177496L, 128404L, 156754L
), variable = c("var1", "var1", "var1", "var1", "var1", "var1", 
"var2", "var2", "var2", "var2", "var2", "var2")), class = "data.frame", row.names = c(NA, 
-12L))

我看过软件包作者的 the example code,但是我想不出一种方法来为 var1 和 var2 分配单独的表情符号。

使用 FontAwesome cheatsheet,假设我希望 var1 为 'fa-windows',var2 为 'fa-linux'。这是我从包作者的示例中得到的一些情节代码:

library(ggplot2)
library(emojifont)
library(scales)

load.fontawesome()
testLabels <- fontawesome(c('fa-windows','fa-linux'))

windows() #only necessary if using RStudio

ggplot(sample,aes(x=month,y=number,color=variable))+
  geom_text(aes(label=testLabels),family='fontawesome-webfont', size=6)+
  scale_y_continuous(labels = comma)+
  theme(legend.text=element_text(family='fontawesome-webfont'))

这会引发错误:“错误:美学必须是长度 1 或与数据相同”,这并不奇怪,因为我没有将 var1 和 var2 设置为与 testLabels 中任何地方的相关 FontAwesome 值相对应在代码中。但是,我不知道该怎么做,而且我在网上也找不到答案(可能是我搜索技术欠缺)。

我相信有更多 ggplot2 经验的用户可以帮助我快速找到答案 - 提前致谢!

labs <- data.frame(variable=c("var1", "var2"),
                   label = fontawesome(c('fa-windows','fa-linux')))
d <- merge(sample, labs, by.x="variable", by.y="variable")
ggplot(d,aes(x=month,y=number,color=variable))+
  geom_text(aes(label=label),family='fontawesome-webfont', size=6)+
  scale_y_continuous(labels = comma)+
  theme(legend.text=element_text(family='fontawesome-webfont'))

永远不要在 aes 中使用变量,它应该只用于美学映射。