如何在DiagrammeR的digraph流程图节点中嵌入数据框值?
如何在DiagrammeR流程图中嵌入数据框的值?
当然可行,你可以通过字符串拼接的方式把数据框(包括从SQL数据库读取的二级数据框)中的值嵌入到grViz的DOT语法代码里。下面是针对你的需求的具体实现:
方法1:使用基础的paste()函数拼接字符串
先提取要嵌入的值,再把它拼接到DOT代码中对应节点的label属性里:
library(DiagrammeR) # 获取要嵌入的iris数据集值 embed_value <- iris[2,4] # 拼接DOT代码字符串 dot_code <- paste(" digraph { # graph attributes graph [overlap = true] # node attributes node [shape = box, fontname = Helvetica, color = blue] # edge attributes edge [color = gray] # 修改ELEPHANT节点,添加包含嵌入值的label A; B; C; D; ELEPHANT[label = 'ELEPHANT\\n", embed_value, "'] F [color = black] # node attributes node [shape = circle, fixedsize = true, width = 0.9] # node statements 1; 2; 3; 4; 5; 6; 7; 8 # edge statements A->1; B->2 // gray B->3 [color = red] // red B->4 // gray C->A [color = green] // green 1->D; ELEPHANT->A; 2->4; 1->5; 1->F // gray ELEPHANT->6; 4->6; 5->7; 6->7 // gray 3->8 [color = blue] // blue } ", sep = "") # 生成流程图 grViz(dot_code)
方法2:使用glue包简化字符串插入
glue包支持在字符串中直接引用变量,代码可读性更强,推荐使用:
library(DiagrammeR) library(glue) # 获取要嵌入的值 embed_value <- iris[2,4] # 直接在DOT代码中用{embed_value}插入变量 grViz(glue(" digraph { # graph attributes graph [overlap = true] # node attributes node [shape = box, fontname = Helvetica, color = blue] # edge attributes edge [color = gray] # 直接在label中嵌入变量 A; B; C; D; ELEPHANT[label = 'ELEPHANT\\n{embed_value}'] F [color = black] # node attributes node [shape = circle, fixedsize = true, width = 0.9] # node statements 1; 2; 3; 4; 5; 6; 7; 8 # edge statements A->1; B->2 // gray B->3 [color = red] // red B->4 // gray C->A [color = green] // green 1->D; ELEPHANT->A; 2->4; 1->5; 1->F // gray ELEPHANT->6; 4->6; 5->7; 6->7 // gray 3->8 [color = blue] // blue } "))
注意事项
- 这里用
\\n实现换行,让嵌入的值作为节点的子文本显示; - 不管是内置数据集还是从SQL数据库读取的数据框,只要能提取出具体的数值/文本,都可以用同样的方法嵌入到节点的
label或其他属性中。
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

