Блок-схема метаанализа

Можно ли воспроизвести блок-схему типа метаанализа, как показано на рисунке ниже, с помощью любого инструмента R? введите здесь описание изображения

Моя попытка использовала mermaid:

diagram = "
graph LR
  subgraph Screening
    b1-->b2
end
  subgraph Eligibility
    c1-->c2
  end
  subgraph Included
    d1-->d2
  end
  subgraph Identification
    a1-->a2
  end



"
mermaid(diagram)

Что сгенерировало:

введите здесь описание изображения

Но я не могу найти способ соединить узлы через подграфы.

Есть ли другой инструмент, лучше подходящий для такой работы? Я думаю о любом пакете, который я мог бы использовать в своем документе Rmarkdown.


person lf_araujo    schedule 04.12.2018    source источник


Ответы (1)


Я нашел пакет DiagrammeR проще всего сделать это. Общая идея будет примерно такой:

library(glue)
library(DiagrammeR)

excluded <- glue('Full text articles excluded
             n = 1000
             Reasons for exclusion
             Reason 1
             Reason 2')
grViz("
digraph cohort_flow_chart
{
node [fontname = Helvetica, fontsize = 12, shape = box, width = 4]
a[label = 'Records identified in original search']
b[label = 'Records identified with update']
c[label = 'Records after duplicates removed']
d[label = 'Records screened']
e[label = 'Records excluded']
f[label = 'Full text articles assessed']
g[label = 'Studies included']
h[label = '@@1']



{ rank = same; a b}
{ rank = same; d, e}
{ rank = same; f, h}

a -> c;
b -> c;
c -> d;
d -> e [ minlen = 3 ];
d -> f;
f -> h [ minlen = 3 ];
f -> g;
}

[1]: excluded
")

Будет выглядеть так:

введите здесь описание изображения

Изображение с метками и пустыми узлами

grViz("
digraph cohort_flow_chart
{
node [fontname = Helvetica, fontsize = 12, shape = box, width = 4]
i[label = 'Identification', fillcolor = LightBlue, 
  style = filled,     width = 2]
j[label = 'Screening',fillcolor = LightBlue, style = filled, width = 2]
k[label = 'Eligibility', fillcolor = LightBlue, style = filled, 
  width = 2]
l[label = 'Included', fillcolor = LightBlue, style = filled, width = 2]

a[label = 'Records identified in original search']
b[label = 'Records identified with update']
c[label = 'Records after duplicates removed']
d[label = 'Records screened']
e[label = 'Records excluded']
f[label = 'Full text articles assessed']
g[label = 'Studies included']
h[label = '@@1']
blank_1[label = '', width = 0.01, height = 0.01]
blank_2[label = '', width = 0.01, height = 0.01]
blank_4[label = '', width = 4, color = White]

{ rank = same; a b i}
{ rank = same; blank_4 c j}
{ rank = same; f k}
{ rank = same; g l}
{ rank = same; blank_1 e}
{ rank = same; blank_2 h}

a -> c;
b -> c;
b -> blank_4 [ dir = none, color = White];
c -> d;
d -> blank_1 [ dir = none ];
blank_1 -> e [ minlen = 3 ];
blank_1 -> f;
f -> blank_2 [ dir = none ];
blank_2 -> h [ minlen = 3 ];
blank_2 -> g;

}

[1]: excluded
")

введите здесь описание изображения

person Pete    schedule 04.12.2018
comment
Большое спасибо, это ответы. Можно ли добавить вертикальные метки, чтобы обозначить отдельные этапы от идентификации до включения? - person lf_araujo; 04.12.2018
comment
Вы, конечно, можете добавить метки, но не уверены, что сможете сделать их вертикальными с помощью функции grViz. - person Pete; 04.12.2018
comment
Отредактирован ответ, чтобы включить горизонтальные метки. Также можно переместить исключенные поля, если хотите. Не уверен, что с grViz есть простой способ лучше выровнять поле «Записи, идентифицированные с помощью обновления». - person Pete; 04.12.2018