使用表情符号的 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
使用的默认 rect
s 替换为您的符号:
- 对于自定义
draw_key_symbol
函数,我将 ggplot2::draw_key_text
添加到您的用例中。
- 为了选择正确的符号,我首先设置颜色和符号的调色板,将颜色和符号分配给性别。然后根据
symbols[names(match.arg(data$fill, pal))]
的填充颜色选择正确的符号
- 我将
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)
我有以下代码可以生成饼图和图例。有没有办法让表情符号和饼图的颜色相同,因为目前表情符号是黑色的。另外我希望删除图例中的方形色块,并在正确的表情符号旁边出现男性和女性术语
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
使用的默认 rect
s 替换为您的符号:
- 对于自定义
draw_key_symbol
函数,我将ggplot2::draw_key_text
添加到您的用例中。 - 为了选择正确的符号,我首先设置颜色和符号的调色板,将颜色和符号分配给性别。然后根据
symbols[names(match.arg(data$fill, pal))]
的填充颜色选择正确的符号
- 我将
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)