首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R DiagrammeR包-路径图的动态标签

R DiagrammeR包-路径图的动态标签
EN

Stack Overflow用户
提问于 2015-10-31 20:46:42
回答 3查看 1.2K关注 0票数 2

我试图在每个步骤中表示算法的输出,经过谷歌搜索后,我发现我可以使用DiagrammeR包。我正在查看如下输出

以上代码如下所示-

代码语言:javascript
复制
library('DiagrammeR')
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, G


  # several 'edge' statements
  A->C B->C C->D D->E E->F
  F->G
  }
  ")

只是我希望标签A,B等替换为某些变量的值。这在DiagrammeR中是可能的吗?另外,有人能推荐一个不同的套餐吗?谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-10-31 21:57:59

希望这能使方法变得清晰,从本质上讲,我认为您应该动态构造传递给grViz()的函数定义

代码语言:javascript
复制
library(DiagrammeR)

n <- c("Alpha", "Bravo", "Charlie", "D", "E", "F", "G")

##  Construct your node and edge statements dynamically:
nodes <- paste(n, collapse="; ")

##  Insert parts of edge statements dynamically:
edges <- paste0( 
  n[1], "->", n[3], " ",
  n[2], "->", n[3], " ",
  n[3], "->D ",
  "D->E ",
  "E->F ",
  "F->G "
)

##  Plot graph:
grViz(
  paste0(" digraph boxes_and_circles {

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

    # several 'node' statements
    node [shape = box,
    fontname = Helvetica]
    ", nodes, "
    # several 'edge' statements
    ", edges, "
    }"
  )
)

票数 2
EN

Stack Overflow用户

发布于 2015-10-31 21:58:30

生成这些内容的代码只是一个文本字符串,因此有许多方法可以动态生成所需的文本

代码语言:javascript
复制
f <- function(a,b,c,d,e,f,g) {
  gr <- sprintf("
    digraph boxes_and_circles {

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

                # several 'node' statements
                node [shape = box,
                fontname = Helvetica]
                %s; %s; %s; %s; %s; %s, %s


                # several 'edge' statements
                %s->%s %s->%s %s->%s %s->%s %s->%s
                %s->%s
      }", a,b,c,d,e,f,g,a,c,b,c,c,d,d,e,e,f,f,g)
  require('DiagrammeR')
  grViz(gr)
}

像这样使用它

代码语言:javascript
复制
do.call(f, as.list(letters[1:7]))

代码语言:javascript
复制
f('head1','head2','next','two','three','four','last')

票数 2
EN

Stack Overflow用户

发布于 2015-11-02 16:40:06

如果您不介意使用图形函数(和magrittr包),您可以尝试这样做:

代码语言:javascript
复制
devtools::install_github('rich-iannone/DiagrammeR')
library(DiagrammeR)
library(magrittr)

label_a <- "Alpha"
label_b <- "Bravo"
label_c <- "Charlie"

graph <- create_graph() %>%
set_global_graph_attr("graph", "overlap", "true") %>%
set_global_graph_attr("node", "shape", "box") %>%
set_global_graph_attr("node", "fontname", "Helvetica") %>%
add_node_df(create_nodes(LETTERS[1:7])) %>%
add_edges("A", "C") %>%
add_edges("B", "C") %>%
add_edges("C", "D") %>%
add_edges("D", "E") %>%
add_edges("E", "F") %>%
add_edges("F", "G") %>%
select_nodes("A") %>%
set_node_attr_with_selection("label", label_a) %>%
clear_selection() %>%
select_nodes("B") %>%
set_node_attr_with_selection("label", label_b) %>%
clear_selection() %>%
select_nodes("C") %>%
set_node_attr_with_selection("label", label_c) %>%
clear_selection()

render_graph(graph)

该代码创建了以下内容:

您需要从GitHub安装最新版本的DiagrammeR (使用devtools::install_github),因为其中一些功能在最新的CRAN发行版中不可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33451753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档