使用国家标志代替文本作为facet_grid()的标签

vecaoik1  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(110)

我找到了解决方案,添加标志而不是国家名称作为分类变量的标签作为轴。
但是,当我想用一个标志来标记
facet_grid(Country ~ Year, switch = "y")

0yg35tkg

0yg35tkg1#

ragg包启用AGG图形后端,完全支持高级文本功能,包括emoji。这使得您可以轻松地在任何可以使用文本字符串(轴,面标签,绘图标签等)的地方包含任何国旗,并且您可以利用操作系统中内置的表情符号集,而不是寻找自己的图形资源。

RStudio可以配置为使用AGG渲染器作为其后端(设置->通用->图形),ggsave()也可以使用此后端来保存图:

library(ragg)
library(ggplot2)

df <- data.frame(
  country = c('🇨🇦 Canada', '🇺🇸 United States', '🇲🇽 Mexico')
)

ggplot(df, aes(x = 1, y = 1)) +
  facet_grid(facets = ~country)

ggsave('flags.png', width = 4, height = 2, device = agg_png)

kg7wmglp

kg7wmglp2#

只要你有一些指向你想要的标志的url,你就可以从ggtext使用element_markdown。如果你在列中只有国家名称,那么这个小函数会有所帮助:

get_flag <- function(data, column) {
  data[[column]] <- paste0("<img 
  src='https://www.sciencekids.co.nz/images/pictures/flags96/",
                           data[[column]], ".jpg' width='100' /><br>*",
                           data[[column]], '*')
  data
}

所以现在你可以

library(ggplot2)
library(ggtext)

ggplot(get_flag(df, 'Country'), aes(Set, Value)) +
  geom_point() +
  facet_grid(Country ~ Year, switch = 'y') +
  theme(strip.text.y.left = element_markdown(angle = 0),
        strip.placement = 'outside')

使用数据

df <- data.frame(Year = rep(2020:2023, each = 6),
                 Value = rnorm(24),
                 Set = rep(rep(c('A', 'B'), each = 3), length = 24),
                 Country = rep(c('Canada', 'Scotland', 'Mexico'), length = 24))

相关问题