首页 > 其他分享 >R包:DiagrammeR流程图

R包:DiagrammeR流程图

时间:2024-07-17 10:57:09浏览次数:15  
标签:流程图 process svg hospital DiagrammeR Patients graph paste0

介绍

DiagrammeR 依赖于图形描述语言 Graphviz,可以通过 R 包 igraph 和 visNetwork 访问。DiagrammeR 通过将有效的图规范以 DOT 语言的形式传递给 grViz() 函数来输出图。

加载R包

采用DiagrammeRR包,它提供了以下函数:

  • 使用create_graph()render_graph()在节点和边的列表上。

  • 创建一个有效的DOT语言图规范,并将此作为字符串传递给函数grViz()

  • 创建一个有效的图规范,并将此作为字符串或 .mmd 文件引用传递给函数 mermaid()。

knitr::opts_chunk$set(message = FALSE, warning = FALSE)

if (!require("pacman")) {
  install.packages("pacman")
}
pacman::p_load(here,
               tidyverse,
               DiagrammeR,
               DiagrammeRsvg,
               rsvg, 
               xml2,
               plotly)

rm(list = ls())
options(stringsAsFactors = F)
options(future.globals.maxSize = 10000 * 1024^2)

create_graph创建图

简单的图可以通过在节点和边的数据框列表上使用 create_graph() 方法来创建。这种方法对于绘制对象之间的简单关系非常方便。

# 定义图边和节点 
# 1 == "Photosynthesis"
# 2 == "Aerobic respiration"  
# 3 == "Solar energy"  

edges <- create_edge_df(from = c(1, 2, 3), 
                        to = c(2, 1, 1), 
                        label = c("Oxygen \n Glucose", "Carbon dioxide \n Water", NA),
                        color = "black") 

nodes <- create_node_df(n = 3,
                        label = c("Photosynthesis", "Aerobic \n respiration", "Solar \n energy"),
                        type = "lower",
                        style = "filled",
                        fillcolor = c("darkseagreen", "mistyrose", "gold"), 
                        fontcolor = "black",
                        shape = "circle",
                        fixedsize = T)

# 创建图
simple_graph <- create_graph(nodes_df = nodes, edges_df = edges)  

# 渲染图
render_graph(simple_graph)

# 导出图
# export_graph(simple_graph,
#              file_name = here("figures", "dv-using_diagrammer-simple_flowchart.svg"),
#              file_type = "svg")

如果您想创建更复杂的流程图,这种方法存在一些限制。

  • 边必须使用到和从的数值向量进行编码。
  • 没有简单的方法来指定节点位置(将太阳能显示为顶部节点是有意义的)。
  • 没有简单的方法来指定边标签的位置。
  • 如果节点标签太长,图形输出会被修剪。

grVis创建流程图

创建流程图

simple_flowchart <- grViz(
  "digraph {
         
    graph[layout = dot, rankdir = LR] # Set node direction
                     
    node[shape = circle, style = filled] # Set global node attributes 
                     
    a[label = 'Photosynthesis', fillcolor = 'darkseagreen']
    b[label = 'Aerobic \nrespiration', fillcolor = 'mistyrose']
    c[label = 'Solar \nenergy', fillcolor = 'gold']

    edge[color = black, fontsize = 8] # Set global edge attributes  
                     
    a -> b[label = 'Oxygen \nGlucose']
    a -> b[style = 'invis']
    a -> b[style = 'invis']
    b -> a[label = 'Carbon dioxide \n Water']
    b -> a[style = 'invis']
    b -> a[style = 'invis']
    c -> a[label = '                       ']
                     
  }"
)

simple_flowchart

# # Export graph as an svg -------------------------------------------------------
# simple_flowchart %>% 
#   export_svg %>%
#   charToRaw %>%
#   rsvg_svg(here("figures", "dv-using_diagrammer-simple_grvis.svg"))

  • 为节点和边设置全局属性,并在需要时使用局部属性手动覆盖个别节点或边。
  • 按照这里推荐的方法,创建额外的不可见边层以增加特定节点之间的箭头曲率。
  • 创建一个带有空字符串的边标签,以增加特定边的长度。

grVis创建复杂流程图

  • 机器学习流程图
# Create a flow chart to describe my ML workflow -------------------------------  
ml_workflow <- grViz(
  "digraph {
         
    graph[layout = dot]
                     
    node[shape = rectangle, style = filled, fillcolor = 'blanchedalmond'] 
                     
    data_source_1[label = 'Data \n warehouse', shape = cylinder, fillcolor = 'azure']
    data_source_2[label = 'Survey.csv', fillcolor = 'aliceblue']
    data_source_3[label = 'External data \n API', shape = cylinder, fillcolor = 'azure']
                  
    process_1[label = 'Data cleaning \n and joining']
    process_2[label = 'Feature selection']
    process_3[label = 'Split train \n and test dataset']  
    process_4[label = 'Cross-validation']  
    process_5[label = 'Test different \n ML algorithms']
    process_6[label = 'Select optimal \n ML model']
                     
    file_1[label = 'Clean data', fillcolor = 'aliceblue']
    file_2[label = 'Training data', fillcolor = 'aliceblue']
    file_3[label = 'Test data', fillcolor = 'aliceblue']
                     
    product_1[label = 'Optimal \n ML model', shape = 'ellipse', fillcolor = 'lightsalmon']
                     
    edge[color = black, fontsize = 12] 
                     
    data_source_1 -> process_1
    data_source_2 -> process_1
    data_source_3 -> process_1  
                     
    process_1 -> file_1
                     
    file_1 -> process_2
    process_2 -> process_3
    process_3 -> file_2
    process_3 -> file_3
                     
    file_2 -> process_4
    process_4 -> process_5
    process_5 -> process_4
                     
    process_5 -> file_3
    file_3 -> process_6
    process_6 -> product_1
                     
    product_1 -> file_2[label = '      Constantly monitor \n for ML model drift',
                        style = 'dashed', penwidth = 2, weight = 2, 
                        color = 'firebrick', fontcolor = 'firebrick']
                     
  }"
)

ml_workflow


# # Export graph as an svg -------------------------------------------------------
# ml_workflow %>% 
#   export_svg %>%
#   charToRaw %>%
#   rsvg_svg(here("figures", "dv-using_diagrammer-ml_workflow.svg"))

在这里插入图片描述

  • 临床试验图
# Create flow chart with flexible parameter inputs -----------------------------  
set.seed(111)

a <- 200 # Total patients
b <- sample(1:60, 1) # Excluded patients
c <- 200 - b # Randomised patients 
d <- ceiling(c/2) # Assigned treatment A
e <- c - d # Assigned treatment B

# Store parameters inside a list
flow_chart_data <- list(a, b, c, d, e) 

# Create grVis() graph
simple_trial <- grViz(
  "digraph {
         
    graph[layout = dot]
                     
    node[shape = rectangle, style = filled, margin = 0.2, fillcolor = 'aliceblue']  
                     
    a[label = '@@1']
    b[label = '@@2', fillcolor = 'mistyrose']
    c[label = '@@3']
    d[label = '@@4']
    e[label = '@@5']

    edge[color = black]   
                
    a -> b[style = 'dashed']
    a -> c[weight = 2] # Weighs this edge more heavily so it is centrally placed 
    c -> d
    c -> e
                     
  }
                     
  [1]: paste0('Patients screened (n = ', flow_chart_data[[1]], ')')
  [2]: paste0('Patients excluded (n = ', flow_chart_data[[2]], ')')
  [3]: paste0('Patients randomised (n = ', flow_chart_data[[3]], ')')
  [4]: paste0('  Patients assigned Treatment A (n = ', flow_chart_data[[4]], ')')
  [5]: paste0('  Patients assigned Treatment B (n = ', flow_chart_data[[5]], ')')

  "
) 

simple_trial

# # Export graph as an svg -------------------------------------------------------
# simple_trial %>% 
#   export_svg %>%
#   charToRaw %>%
#   rsvg_svg(here("figures", "dv-using_diagrammer-flowchart_clinical_single.svg"))

在这里插入图片描述

  • 多研究中心临床试验图
# Create flow chart with flexible parameter inputs -----------------------------  
set.seed(111)

a <- 200
b <- sample(1:60, 1)
c <- 200 - b
d <- ceiling(c/2)
e <- c - d

set.seed(222)

f <- 125
g <- sample(1:45, 1)
h <- 125 - b
i <- ceiling(h/2)
j <- h - i

# Store subgroup parameters in separate lists  
hospital_a <- list(a, b, c, d, e) 
hospital_b <- list(f, g, h, i, j)

# Create grVis() graph  
multi_trial <- grViz(
  "digraph {

    graph[layout = 'dot', rankdir = TB]
               
    node[shape = rectangle, style = filled, margin = 0.2, fillcolor = 'azure']
               
    subgraph cluster_a { 
      graph[rankdir = TB, label = 'Hospital A',
            fontsize = 18, shape = rectangle, style = dashed]

      a[label = '@@1']
      b[label = '@@2', fillcolor = 'mistyrose']
      c[label = '@@3']
      d[label = '@@4', fillcolor = 'aliceblue']
      e[label = '@@5', fillcolor = 'aliceblue']
               
    }
               
    subgraph cluster_b { 
      graph[rankdir = TB, label = 'Hospital B',
            fontsize = 18, shape = rectangle, style = dashed]
             
      f[label = '@@6']
      g[label = '@@7', fillcolor = 'mistyrose']
      h[label = '@@8']
      i[label = '@@9', fillcolor = 'aliceblue']
      j[label = '@@10', fillcolor = 'aliceblue']
               
    }
               
    edge[color = black]
               
    a -> b[style = 'dashed']
    a -> c[weight = 2] 
    c -> d
    c -> e
    f -> g[style = 'dashed']
    f -> h[weight = 2] 
    h -> i
    h -> j
               
  }
      
  [1]: paste0('Patients screened (n = ', hospital_a[[1]], ')')
  [2]: paste0('Patients excluded (n = ', hospital_a[[2]], ')')
  [3]: paste0('Patients randomised (n = ', hospital_a[[3]], ')')
  [4]: paste0('  Patients assigned Treatment A (n = ', hospital_a[[4]], ')')
  [5]: paste0('  Patients assigned Treatment B (n = ', hospital_a[[5]], ')')
  [6]: paste0('Patients screened (n = ', hospital_b[[1]], ')')
  [7]: paste0('Patients excluded (n = ', hospital_b[[2]], ')')
  [8]: paste0('Patients randomised (n = ', hospital_b[[3]], ')')
  [9]: paste0('  Patients assigned Treatment A (n = ', hospital_b[[4]], ')')
  [10]: paste0('  Patients assigned Treatment B (n = ', hospital_b[[5]], ')')

  "
)  

multi_trial

# # Export graph as an svg -------------------------------------------------------
# multi_trial %>% 
#   export_svg %>%
#   charToRaw %>%
#   rsvg_svg(here("figures", "dv-using_diagrammer-flowchart_clinical_multiple.svg"))

在这里插入图片描述

标签:流程图,process,svg,hospital,DiagrammeR,Patients,graph,paste0
From: https://blog.csdn.net/H20230717/article/details/140486467

相关文章

  • 917、基于51单片机的出租车计价器(昼夜,LCD1602,步进电机,里程,单价)(程序+Proteus仿真+原理
    毕设帮助、开题指导、技术解答(有偿)见文未目录方案选择单片机的选择显示器选择方案一、设计功能二、Proteus仿真图单片机模块设计三、原理图四、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择......
  • 471、基于51单片机的自行车(速度,里程,电机,LCD1602)(程序+Proteus仿真+原理图+流程图+元器
    毕设帮助、开题指导、技术解答(有偿)见文未目录方案选择单片机的选择显示器选择方案一、设计功能二、Proteus仿真图单片机模块设计三、原理图四、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择......
  • STM32开发实例_基于Zigbee的智能路灯系统(电路图+程序+流程图)24-32-64
    一.系统概述1.智能组网与数据传输:利用Zigbee技术自由灵活地组网小区智能路灯。小区与监控中心通过WiFi实现实时数据传输。2.人工模式下的路灯控制:可手动调节路灯亮度等级(一级、二级、三级)。能切换定时、自动、手动三种控制模式。3.定时模式控制:通过小程序设定路灯的定时......
  • 417、基于51单片机的热水器(燃气,温度,LCD1602,阀门PID)(程序+Proteus仿真+原理图+流程图+
    毕设帮助、开题指导、技术解答(有偿)见文未目录方案选择单片机的选择显示器选择方案一、设计功能二、Proteus仿真图单片机模块设计三、原理图四、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择......
  • 流程图
    流程图流程图和活动图都是用于描述程序执行过程的控制流,它们及其类似,需要主要的是活动图是有一些面向对象的思想,比如对象流,可以描述并发。流程图是面向面向过程的图。基本元素包含开始结束椭圆(活动图里面是实心圆和圆环+实心圆),一般用圆角矩形开始结束标记可以很明显的不......
  • ComfyUI流程图、文生图、图生图步骤教学!
    前言leetcode,209.长度最小的子数组给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的子数组[numsl,numsl+1,…,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。publicintminSubAr......
  • 开发一个流程图编辑器
    最近用react+golang开发的一个后管项目中需要用到流程图编辑器,实现一个审批流配置的功能,找了react生态下的一些开源库,最终决定使用xflow,这个库非常强大,但是还不能完全满足我的需求。我的需求:1、布局使用左中右的三列布局,从左到右分别是可用节点、编辑器画布、属性面板2、节点(审......
  • 前端vue3项目dagre-d3基础配置项及流程图组件示例(包括安装依赖)
    目录引言d3是什么?dagre是什么?dagre-d3是什么?dagre-d3配置项流程图示例依赖安装组件示例总结引言因为很多文档都是英文,刚开始调研的时候比较费劲,文档里的配置像示例又比较分散,就自己整理了一下,附上测试时写的示例d3是什么?d3.js 是一个强大的JavaScript库,用于在......
  • visio2021下载安装永久密钥最新版甘特图流程图绘图软件
    Visio2021专业版是一款功能强大的图表制作软件,可帮助您创建专业且易于理解的图表,以可视化信息、流程和系统。它提供广泛的功能和工具,可满足各种用户的需求,从初学者到专家。主要功能:使用现成模板和形状轻松创建专业图表创建符合行业标准(包括BPMN2.0、UML2.5和IEEE)的......
  • 演示:WPF开发的Diagram自动化流程图应用
    一、目的:演示Diaram应用功能二、预览三、功能列表功能模块通用测试流程图仪器仪表机器人网络通信测试PLC测试轮毂生产线流程测试 图像处理目标检测绘图思维导图图表流程图功能模板管理工程管理模块许可管理工具栏开始停止删除清......