使用表情符号的 ggplot 图例

ggplot legend with the use of emojis

我有以下代码可以生成饼图和图例。有没有办法让表情符号和饼图的颜色相同,因为目前表情符号是黑色的。另外我希望删除图例中的方形色块,并在正确的表情符号旁边出现男性和女性术语

library(tidyverse)
library(emojifont)
load.emojifont("OpenSansEmoji.ttf")

gender<-data.frame(`Gender`=c("Male","Female"),
                   `Proportion`=c(45,55), symbol=c("\UF182","\UF183"))

ggplot(gender, aes(x="", Proportion, fill=symbol, label=symbol)) +
  geom_bar(width = 1, stat = "identity")+
  coord_polar("y", start=0)+
  xlab(NULL)+ylab(NULL) +
  theme(legend.text=element_text(family='fontawesome-webfont'))

实现您想要的结果的一个选项是通过自定义键字形函数,该函数将 geom_bar 使用的默认 rects 替换为您的符号:

  1. 对于自定义 draw_key_symbol 函数,我将 ggplot2::draw_key_text 添加到您的用例中。
  2. 为了选择正确的符号,我首先设置颜色和符号的调色板,将颜色和符号分配给性别。然后根据 symbols[names(match.arg(data$fill, pal))]
  3. 的填充颜色选择正确的符号
  4. 我将 Gender 映射到 fill aes 并使用 scale_fill_manual 设置颜色,而不是 symbol

注意:虽然我使用默认的 ggplot2 颜色,但下面的代码也适用于性别的自定义颜色。

library(ggplot2)
library(grid)
library(emojifont)

load.emojifont("OpenSansEmoji.ttf")

gender <- data.frame(
  `Gender` = c("Male", "Female"),
  `Proportion` = c(45, 55),
  symbol = c("\UF182", "\UF183")
)

# Color palette
pal <- scales::hue_pal()(2)
names(pal) <- c("Female", "Male")
# Symbol palette
symbols <- c("\UF182", "\UF183")
names(symbols) <- c("Female", "Male")

draw_key_symbol <- function(data, params, size) {
  data$label <- symbols[names(match.arg(data$fill, pal))]
  
  grid::textGrob(data$label, 0.5, 0.5, 
                 gp = grid::gpar(col = data$fill, 
                                 fontfamily = "fontawesome-webfont", 
                                 fontsize = 3.88 * .pt))
}

ggplot(gender, aes(x = "", Proportion, fill = Gender)) +
  geom_bar(width = 1, stat = "identity", key_glyph = "symbol") +
  scale_fill_manual(values = pal) +
  coord_polar("y", start = 0) +
  labs(x = NULL, y = NULL)