使用表情符号的 ggplot 图例

awz*_*wz1 2 r ggplot2 emoji

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

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'))
Run Code Online (Sandbox Code Playgroud)

ste*_*fan 5

实现所需结果的一种选择是通过自定义键字形函数来替换符号rect使用的默认 s :geom_bar

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

注意:虽然我使用默认的 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述