将图像插入gt表

问题描述

我对如何使用text_transform包中的local_imagegt函数将图像插入数据单元格感到困惑

我有大约十二个.png文件,这些文件带有我要插入的图形。它们具有州缩写的名称,例如CA.png,UT.png,OH.png等。它们都放在一个本地文件夹中。

因此,给定一个基本表,例如

library(gt)
library(magrittr)

Column_one <- c("CA","UT","OH")
column_two <- c(NA,NA,NA)    #placeholder for graphics

dashboard.data <- data.frame(column_one,column_two,stringsAsFactors = FALSE)

names(dashboard.data)[1] <- "State"
names(dashboard.data)[2] <- "IncidenceGauge"

dboard3 <- dashboard.data %>% gt() %>%
  tab_header(
    title = md("**Big Title**"),subtitle = md("*Subtitle*")
  ) %>%
  cols_label(IncidenceGauge = "Risk Level") %>%
  
  print(dboard3)

我该如何将png文件加载到第二列的相应行中?

解决方法

可以通过gt函数text_transformlocal_image来实现,就像这样:

  1. text_transform转换列的内容时,将文件名放在第二列中。
  2. 对于函数参数.fn,将函数传递到text_transform以遍历列元素,并通过local_image加载并转换图像,并返回字符向量。

使用purrrggplot2,以下代码首先使ggplots成为示例,将它们另存为png,最后将它们添加到第二列:

library(gt)
library(magrittr)
library(purrr)
library(ggplot2)

# Let's make some pngs
mtcars %>% 
  split(.$cyl) %>% 
  map(~ ggplot(.x,aes(hp,mpg,color = factor(gear))) + geom_point()) %>% 
  set_names(c("CA","UT","OH")) %>% 
  iwalk(~ ggsave(paste0(.y,".png"),.x))

column_one <- c("CA","OH")
# Put the filenames in the column
column_two <- c("CA","OH")

dashboard.data <- data.frame(column_one,column_two,stringsAsFactors = FALSE)

names(dashboard.data)[1] <- "State"
names(dashboard.data)[2] <- "IncidenceGauge"

dboard3 <- dashboard.data %>% 
  gt() %>%
  tab_header(
    title = md("**Big Title**"),subtitle = md("*Subtitle*")
  ) %>%
  text_transform(
    locations = cells_body(vars(IncidenceGauge)),fn = function(x) {
      # loop over the elements of the column
      map_chr(x,~ local_image(
        filename = paste0(.x,height = 100
      ))
    }) %>% 
  cols_label(IncidenceGauge = "Risk Level")
    
print(dboard3)

enter image description here