将DiagrammeR 对象保存为光盘上的PNG

Bjö*_*örn 3 plot r r-lavaan diagrammer

我正在使用lavaanPlot-Package来绘制用 lavaan 创建的路径模型。奇迹般有效。为了方便起见,这里有一个可重现的示例

可重复的例子

library(pacman)
p_unload()
p_load(dplyr,lavaan,webshot,lavaanPlot)
model <- 'mpg ~ cyl + disp + hp
          qsec ~ disp + hp + wt'

fit <- sem(model, data = mtcars)
summary(fit)

plot <- lavaanPlot(model = fit, 
                   node_options = list(shape = "box", fontname = "Helvetica"), 
                   edge_options = list(color = "grey"), 
                   coefs = F)

plot
Run Code Online (Sandbox Code Playgroud)

不过,我想将结果保存到光盘上的 png 文件中(而不是使用某种形式的屏幕截图)。在文档中挖掘我发现 lavaanPlot 返回一个图表对象。我尝试用三种不同的方法获取 png 文件

方法

1. Webshot
给了我错误webshot.js returned failure value: 1
2. export_graph
我发现了一些如何修复此链接的建议,建议使用 DiagrammeR export_graph。但这给了我以下错误:

Fehler: `export_graph()` REASON:
* The graph object is not valid 
Run Code Online (Sandbox Code Playgroud)

3.export_svg
另外,我在github上找到了这个建议的解决方案,但我也无法使用。它为我生成了一个我无法正确打开的 SVG 文件

# Try 1 using webshot
webshot("Plot_test_webshot.png")

# Try 2 export_graph
plot %>%
  export_graph(file_name = "pic.png",
               file_type = "png")

export_graph(plot,
             file_name = "pic.png",
             file_type = "png")

# Try 3 export_svg
plot %>%
  export_svg() %>%
  charToRaw %>% 
  rsvg_pdf("./path_to_svg_file.svg")
Run Code Online (Sandbox Code Playgroud)

Bjö*_*örn 6

我在包维护者的 Github 中找到了解决方案。
发布此内容是希望将来寻找解决方案的任何人都能找到此解决方案

# Export Function for lavaanPlot Obtained from github
# https://github.com/alishinski/lavaanPlot/blob/export_plots/R/plotExportFunctions.R

save_png <- function(plot, path){
  DiagrammeRsvg::export_svg(plot) %>%
    charToRaw() %>%
    rsvg::rsvg() %>%
    png::writePNG(path)
}
Run Code Online (Sandbox Code Playgroud)

另外,在 Github 上有一个分支,其中已经包含此功能。