2016-08-24 116 views
0

我想在DiagrammeR中使用GraphViz图。我怎样才能做到这一点?如何在DiagrammeR中对R使用GraphViz图R

myGraph = grViz(" 
digraph boxes_and_circles { 

    # a 'graph' statement 
    graph [overlap = true, fontsize = 10] 

    # several 'node' statements 
    node [shape = box, 
     fontname = Helvetica] 
    A; B; C; D; E; F 

    node [shape = circle, 
     fixedsize = true, 
     width = 0.9] // sets as circles 
    1; 2; 3; 4; 5; 6; 7; 8 

    # several 'edge' statements 
    A->1 B->2 B->3 B->4 C->A 
    1->D E->A 2->4 1->5 1->F 
    E->6 4->6 5->7 6->7 3->8 
} 
") 

然后我想在DiagrammeR中使用它,但它不会允许它。

render_graph(myGraph) 

给出:

Error: class(graph) == "dgr_graph" are not all TRUE 

有没有办法,我需要的GraphViz的图形转换或输入到制图环境?

+0

grViz返回类htmlwidget的对象,而不是dgr_graph。你可以直接myGraph Visalize。使用DiagrammeR中的create_graph函数可以使用render_graph。 – tokiloutok

+0

不幸的是,'gd = create_graph(myGraph)'给出以下错误'错误:“节点%%colnames(nodes_df)中的%不是TRUE' - 我不明白如何使用GraphViz指定DiagrammeR图。如果这是不可能的,为什么DiagrammeR文献花费这么多时间讨论GraphViz?我的意思是,它说“Graphviz支持是DiagrammeR软件包的一个组成部分。” - 如果这是真的,他们如何连接? – ollama

回答

1

grViz需要一个描述图形的字符串(vis.js样式):它由vis.js解释。它的返回值是一个htmlwidget对象。

render_graph需要一个使用create_graph函数创建的dgr_graph对象。

你可以看到in the DiagrammeR doc

library(DiagrammeR) 

# Create a simple NDF 
nodes <- 
    create_nodes(
    nodes = 1:4, 
    type = "number") 

# Create a simple EDF 
edges <- 
    create_edges(
    from = c(1, 1, 3, 1), 
    to = c(2, 3, 4, 4), 
    rel = "related") 

# Create the graph object, 
# incorporating the NDF and 
# the EDF, and, providing 
# some global attributes 
graph <- 
    create_graph(
    nodes_df = nodes, 
    edges_df = edges, 
    graph_attrs = "layout = neato", 
    node_attrs = "fontname = Helvetica", 
    edge_attrs = "color = gray20") 

# View the graph 
render_graph(graph) 

制图可生产Graphviz的代码:从下面提到的文档:“如果你想返回的Graphviz DOT代码(到,也许,分享,或直接使用它用Graphviz的命令行实用程序),只是在render_graph使用输出= “DOT”()”

所以

  1. 可以使用create_graph产生的graphviz点代码
  2. 您可以直接与grViz在制图
  3. 使用graphviz的圆点代码
+0

很好的答案,只是为了确保清楚,'DiagrammeR'中没有将'DOT'转换为'dgr_graph'的函数。 'DiagrammeR'被设计成另一种方式,专注于帮助构建网络和渲染输出。 – timelyportfolio

+0

明白了,所以DOT/GraphViz主要用于DiagrammeR的可视化,但不能用于图形创建 – ollama