[英]R DiagrammeR Package - Labels for Path Diagram to be dynamic
我试图代表每个步骤的算法输出,经过一番谷歌搜索发现我可以使用DiagrammeR包。 我正在看这样的输出
上面的代码是这样的-
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中这可能吗? 否则,有人可以建议其他套餐吗。 谢谢
希望这可以使方法变得清晰,本质上,我认为您应该动态构建传递给grViz()
函数定义:
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, "
}"
)
)
生成这些代码的代码只是一个文本字符串,因此可以通过多种方式动态生成所需的文本
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)
}
像这样使用
do.call(f, as.list(letters[1:7]))
f('head1','head2','next','two','three','four','last')
如果您不介意使用图形函数(和magrittr
包),可以尝试以下操作:
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版本中不可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.