install.packages("ggflowchart")
Introdução
Se você precisa criar um fluxograma para incorporar nos seus documentos quarto
ou rmarkdown
, uma boa solução é o pacote ggflowchart
. Esse pacote é capaz de criar fluxogramas simples que além de serem incorporados nos documentos quarto
ou rmarkdown
, podem ser exportados como bitmap ou vetor para uso em outros aplicativos. Esse pacote foi desenvolvido por Nicola Rennie e está em constante evolução.
O que você vai precisar
Você vai precisar o pacote ggflowchart
utilizando a função install.packages
:
Alternativamente você pode instalar a versão de desenvolvimento diretamente do github
:
::install_github("nrennie/ggflowchart") remotes
Após instalar o pacote, basta carregá-lo:
library(ggflowchart)
Agora que você instalou o pacote, é importante ter em mente o layout do fluxograma que você irá criar. Você pode, inclusive, fazer um raschunho em uma folha de papel. Isso é importante, pois você precisará saber de onde as setas saem e onde chegam para criar o dataframe
que será usado pelo ggflowchart
. Como exemplo, vamos supor que eu queira criar, no quarto
ou no rmarkdown
o seguinte diagrama:
Como fazer
Para usar o ggflowchart
você precisa ter um dataframe
com duas variáveis. Uma dessas variáveis será chamada de from
e a outra variável será chamada de to
, Esses nomes não são obrigatórios, pois ao indicar o dataframe que você deseja usar, o ggflowchart
buscará pelas duas primeiras variáveis e irá considerá-las como sendo from
e to
, respectivamente.
Perceba que no nosso flulxograma modelo saem duas setas do diretor, e duas de cada coordenador. Então esses elementos estarão na variável from
. Nenhuma seta sai dos professores. Por outro lado, cada coordenador recebe uma seta e o mesmo acontece com cada professor. Eles aparecerão na variável to
.
Existem várias maneiras para criar o dataframe
e optei pelo procedimento a seguir para fins didáticos.
Primeiramente vamos criar um vetor chamado from
.
<- c("Diretor", "Diretor", "Coordenador I", "Coordenador I", "Coordenador II", "Coordenador II") from
Vamos entender esse código. Como eu disse anteriormente, saem duas setas do diretor, então, no vetor, o diretor deve ser representado duas vezes e o mesmo acontece com cada um dos coordenadores. Então utilizei a função c
para criar o vetor from
que armazena os valores “Diretor”, “Diretor”, “Coordenador I”, “Coordenador I”, “Coordenador II”, “Coordenador II”. Esses valores devem ser digitados entre aspas pois são do tipo character
Em seguida, vamos criar o vetor to
que corresponde aos elementos que recebem as setas:
<- c("Coordenador I", "Coordenador II", "Professor I", "Professor II", "Professor III", "Professor IV") to
Note que a sequência dos valores do vetor to
tem correspondência com a sequência de valores do vetor from
tendo o fluxograma modelo como referência.
Agora, vamos unir esses doi vetores em um dataframe
que vou chamar de fg
com o seguinte código:
<- data.frame(from, to)
fg
fg
from to
1 Diretor Coordenador I
2 Diretor Coordenador II
3 Coordenador I Professor I
4 Coordenador I Professor II
5 Coordenador II Professor III
6 Coordenador II Professor IV
Agora com o nosso dataframe
pronto, podemos utilizar o ggflowchart
para criar nosso fluxograma:
ggflowchart(fg)

Alterando alguns parâmetros do fluxograma
É claro que é possível personalizar o fluxograma que acabamos de criar. Os argumentos da função ggflowchart
que permitem personalizar o fluxograma são:
fill
determina a cor de preenchimento das caixas
colour
determina a cor do contorno das caixas
text_colour
determina cor do texto
text_size
determina o tamanho do texto
arrow_colour
determina a cor da seta
arrow_size
determina o tamanho da seta
family
determina a familia da fontre do texto
x_nudge
determina a largura da caixa
y_nudge
determina a altura da caixa
horizontal
determina se o fluxograma será exibido horizontalmente (TRUE)
ou verticalmente (FALSE)
Para o nosso fluxograma modelo, escolhi os seguintes parâmetros:
ggflowchart(fg,
fill = "skyblue",
colour = "navy",
text_colour = "sienna",
text_size = 3,
arrow_colour = "black",
arrow_size = 0.3,
family = "sans",
x_nudge = 0.4,
y_nudge = 0.1,
horizontal = FALSE)

Ao construir seu fluxograma, você pode testar os parâmetros dos argumentos para ajustar as cores e tamanhos de acordo com as suas necessidades.
Destacando categorias no fluxograma
Imagine que no nosso fluxograma modelo (Figura 1) o coordenador I e os professores I e II trabalhem no turno diurno enquanto o coordenador II e os professores III e IV trabalhem no turno noturno e o diretor trabalhe em turnos alternados. Diruno e noturno serão nossas categorias e podemos especificar essa informação no nosso fluxograma por meio de cores.
Para isso devemos construir um outro dataframe
contendo duas variáveis. Uma delas obrigatoriamente se chamará name
e terá como valores os nomes dos elementos do fluxograma. A segunda variável pode ter qualquer nome que você desejar e deverá específicar a categoria (no nosso caso os turnos) de cada um dos elementos da variável name
. Veja o código a seguir pelo qual será criado um dataframe
chamado turnos
com duas variáveis: name
e turno
:
<- data.frame(
turnos name = c("Diretor", "Coordenador I", "Professor I", "Professor II", "Coordenador II", "Professor III", "Professor IV"),
turno = c("Alternado", "Diurno", "Diurno", "Diurno", "Noturno", "Noturno", "Noturno")
) turnos
name turno
1 Diretor Alternado
2 Coordenador I Diurno
3 Professor I Diurno
4 Professor II Diurno
5 Coordenador II Noturno
6 Professor III Noturno
7 Professor IV Noturno
Agora com o segundo dataframe
criado, vamos utilizá-lo para gerar um novo fluxograma simples, mas agora com os turnos de cada profissional identificados por cores diferentes:
ggflowchart(fg, turnos, fill = turno)

Note que as cores foram atribuídas automaticamente de acordo com os turnos de trabalho.
Adicionando título e subtítulos
O ggflowchart
funciona utilizando o ggplot2
. Então é possível adicionar algumas informações no fluxograma da mesma maneira que adicionamos a um gráfico do ggplot2
. No exemplo abaixo vamos utilizar o nosso fluxograma personalizado e adicionar algumas informações como título e subtítulo:
ggflowchart(fg,
fill = "skyblue",
colour = "navy",
text_colour = "sienna",
text_size = 3,
arrow_colour = "black",
arrow_size = 0.3,
family = "sans",
x_nudge = 0.4,
y_nudge = 0.1,
horizontal = FALSE) +
::labs(
ggplot2title = "Fluxograma hierárquico da Escola X",
subtitle = "Cada coordenador é responsável por somente um turno",
caption = "Consulte os horários do diretor na escola."
)

Veja que adicionamos as informações utilizando a função labs
do ggplot2
juntamente com os argumentos title
, subtitle
e caption
. Veja no fluxograma gerado onde cada uma dessas informações foi posicionada.
SessionInfo
sessionInfo()
R version 4.4.0 (2024-04-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=Portuguese_Brazil.utf8 LC_CTYPE=Portuguese_Brazil.utf8
[3] LC_MONETARY=Portuguese_Brazil.utf8 LC_NUMERIC=C
[5] LC_TIME=Portuguese_Brazil.utf8
time zone: America/Fortaleza
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggflowchart_1.0.0
loaded via a namespace (and not attached):
[1] vctrs_0.6.5 cli_3.6.2 knitr_1.46 rlang_1.1.3
[5] xfun_0.44 purrr_1.0.2 generics_0.1.3 jsonlite_1.8.8
[9] labeling_0.4.3 glue_1.7.0 colorspace_2.1-0 htmltools_0.5.8.1
[13] scales_1.3.0 fansi_1.0.6 rmarkdown_2.26 grid_4.4.0
[17] munsell_0.5.1 evaluate_0.23 tibble_3.2.1 fastmap_1.2.0
[21] yaml_2.3.8 lifecycle_1.0.4 compiler_4.4.0 dplyr_1.1.4
[25] igraph_2.0.3 htmlwidgets_1.6.4 pkgconfig_2.0.3 tidyr_1.3.1
[29] rstudioapi_0.16.0 farver_2.1.2 digest_0.6.35 R6_2.5.1
[33] tidyselect_1.2.1 utf8_1.2.4 pillar_1.9.0 magrittr_2.0.3
[37] gtable_0.3.5 tools_4.4.0 withr_3.0.0 ggplot2_3.5.1