通过代码保存echarts4r图像(再次)

jer*_*erH 3 r echarts4r

我早些时候在这里问过这个问题,但它被标记为重复并关闭。不幸的是,我指出的答案不起作用......

所以,再次:

我可以制作一个 eCharts4r 仪表,例如

library(echarts4r) 
library(magrittr)

CA_gauge <- e_charts() %>% 
  e_gauge(4.1, 
          "INCIDENCE", 
          min=0, 
          max=20,
          axisLine = list(
            linestyle = list(
              color=list(
                c(1.5/20, "green"),
                c(3/20, "yellow"),
                c(1, "red")
              )
            ))) %>% 
  e_title("CA")

print(CA_gauge)
Run Code Online (Sandbox Code Playgroud)

但我还没有找到将输出保存到文件以便稍后在表中使用它的好方法gt。我能找到的最好的方法是将“saveAsImage”添加到输出中

e_charts() %>% 
      e_gauge(4.1, 
              "INCIDENCE", 
              min=0, 
              max=20,
              axisLine = list(
                linestyle = list(
                  color=list(
                    c(1.5/20, "green"),
                    c(3/20, "yellow"),
                    c(1, "red")
                  )
                ))) %>% 
        e_toolbox_feature(feature = c("saveAsImage"))
Run Code Online (Sandbox Code Playgroud)

这会在 RStudio 查看器的右上角添加一个“另存为”按钮

在此输入图像描述

但我真正想做的只是将代码中的图像(显然没有动画)保存到 tiff/jpg/png 图像文件中。我每周为一个工作项目制作大约十几个这样的文件,所以我一直手动保存这些文件。但它们很受欢迎,老板想要一个包含 75 个以上的新版本。

我尝试使用标准设备,例如

tiff(paste("CA_gauge.tif",sep=""), 
     res=600, compression = "lzw", height=5, width=15, units="in")
print(CA_gauge)
dev.off()
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题...我得到的只是一个全白的 tif 文件。当我的原始线程关闭时,我被指出的答案建议htmlwidgets使用和webshot。按照这个例子我想出了

CA_gauge <- e_charts() %>% 
  e_gauge(round(CA_data[[nrow(CA_data), 10]],1), 
          "CA \nINCIDENCE", 
          animation = FALSE,
          min=0, 
          max=20,
          animation = FALSE,
          axisLine = list(
            lineStyle = list(
              color=list(
                c(1.5/20, "green"),
                c(3/20, "yellow"),
                c(1, "red")
              )
            )))

htmlwidgets::saveWidget(widget = CA_gauge, file = "~/plot.html")
setwd("~")
webshot::webshot(url = "plot.html", 
                 file = "plot.png")
Run Code Online (Sandbox Code Playgroud)

这会产生两个输出文件:plot.htmlplot.png

Plot.html是一大堆在浏览器中看起来像这样的 JavaScript

在此输入图像描述

这一切都很好,但是plot.png据我所知,这是一个 5kb 的 .png 文件,它是空的......当你尝试打开它时,它显示为白屏,就像我尝试使用时得到的一样标准设备。

有什么建议么?

mrh*_*ann 5

我在使用时遇到了同样的问题webshot,但webshot2似乎有效。

webshot2来自 rstudio 的 github

library(echarts4r) 
library(magrittr)
library(webshot2)
library(htmlwidgets)

CA_gauge <- e_charts() %>% 
  e_gauge(4.1, 
          "INCIDENCE", 
          min=0, 
          max=20,
          axisLine = list(
            linestyle = list(
              color=list(
                c(1.5/20, "green"),
                c(3/20, "yellow"),
                c(1, "red")
              )
            ))) %>% 
  e_title("CA")

htmlwidgets::saveWidget(widget = CA_gauge, file = "~/ca_gauge.html")

# I had to set this for webshot2 to work on Ubuntu 20.04 LTS
# Sys.setenv(CHROMOTE_CHROME = '/snap/bin/chromium')
#  use 'Sys.which("chromium")' to get your path.

webshot('ca_gauge.html', file = 'ca_gauge.png')
Run Code Online (Sandbox Code Playgroud)

文件浏览器中的文件:

在此输入图像描述

输出.png:

在此输入图像描述