如何在R中导出Diagrammer的图片

14
我试图创建一个图表的图片,但它只是创建了空白文件。我的数据框如下所示:

df <- data.frame(col1 = c( "猫", "狗", "鸟"), col2 = c( "Feline", "Canis", "Avis"), stringsAsFactors=FALSE)

其余的代码:
png("C:\\tmp\\anim.png")
uniquenodes <- unique(c(df$col1, df$col2))
library(DiagrammeR)
nodes <- create_node_df(n=length(uniquenodes), nodes = seq(uniquenodes), type="number", label=uniquenodes)
edges <- create_edge_df(from=match(df$col1, uniquenodes), to=match(df$col2, uniquenodes), rel="related")

g <- create_graph(nodes_df=nodes, edges_df=edges)
render_graph(g)
dev.off()

3
这些图表主要用于在HTML页面中呈现,而不是保存为图像文件。但是,该软件包可以使用“?export_graph”命令将它们保存(尽管我没有测试过,因为似乎需要额外的软件包)。 - nicola
@nicola,你的建议很好。在我看来应该是答案。 - A5C1D2H2I1M1N2O1R2T1
4个回答

20
这个解决方案来自于这个帖子
library(DiagrammeR)
library(DiagrammeRsvg)
library(magrittr)
library(rsvg)

graph <-
    "graph {
        rankdir=LR; // Left to Right, instead of Top to Bottom
        a -- { b c d };
        b -- { c e };
        c -- { e f };
        d -- { f g };
        e -- h;
        f -- { h i j g };
        g -- k;
        h -- { o l };
        i -- { l m j };
        j -- { m n k };
        k -- { n r };
        l -- { o m };
        m -- { o p n };
        n -- { q r };
        o -- { s p };
        p -- { s t q };
        q -- { t r };
        r -- t;
        s -- z;
        t -- z;
    }
"

grViz(graph) %>%
    export_svg %>% charToRaw %>% rsvg_pdf("graph.pdf")
grViz(graph) %>%
    export_svg %>% charToRaw %>% rsvg_png("graph.png")
grViz(graph) %>%
    export_svg %>% charToRaw %>% rsvg_svg("graph.svg")

目前,您还需要附加DiagrammeRsvg包 - library(DiagrammeRsvg) - Jot eN

9
如果您希望在不先渲染图像的情况下导出为SVG。
require(magrittr)
require(DiagrammeR)
require(DiagrammeRsvg)
require(xml2)

graphobject %>%
  export_svg() %>%
  read_xml() %>%
  write_xml("graph.svg")

不先渲染图像的优点是生成的SVG文件更加干净、小巧和清晰。可使用以下方式进行代码优化和美化:https://jakearchibald.github.io/svgomg/

这为我提供了更好的形象。 - Steve Powell

1
以上代码会产生一个错误:
错误:export_graph() 原因:
  • 图形对象无效() 原因:
  • 图形对象无效

除了此之外不确定是否有其他解决方法。

graph %>%
export_svg() %>%
charToRaw %>%
rsvg_pdf("graph.pdf")

0

首先安装DiagrammeRsvgrsvg包。在代码末尾添加以下行:

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

使用这个工具,您不仅可以创建png图像,还可以创建pdf文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接