Estou tentando personalizar a posição do nó em um eixo x e y em um diagrama de rede usando o DiagrammeR, usando os seguintes DFS de nó, posição e arestas:
nodesdat <- read.table(text = "
id label color fillcolor fontcolor fontsize
1 1 A1 black white black 16
2 2 A3 black white black 16
5 5 A6 black white black 16
18 18 Si black white black 16
19 19 Z1 black white black 16
", header = TRUE)
positionsdat <- read.table(text = "
label id color fillcolor fontcolor fontsize x y
1 A1 1 black white black 16 3 3
2 A3 2 black white black 16 3 4
5 A6 5 black white black 16 3 5
18 Si 18 black white black 16 2 4
19 Z1 19 black white black 16 5 4
", header = TRUE)
edgesdat <- read.table(text = "
id from to rel dir arrowhead arrowtail style color
1 1 1 1 connected_to both odot none dashed black
2 2 2 2 connected_to both odot none dashed black
5 5 5 5 connected_to both odot none dashed black
39 39 18 1 connected_to both normal odot dashed black
40 40 18 5 connected_to both normal odot solid black
41 41 18 18 connected_to both odot none solid black
42 42 19 2 connected_to both odot normal solid black
43 43 19 19 connected_to both odot none solid black
68 68 18 2 connected_to both none normal dashed black
69 69 18 2 connected_to both normal odot solid black
", header = TRUE)
library(DiagrammeR)
library(DiagrammeRsvg)
library(dplyr)
g <- create_graph(nodes_df = nodesdat, edges_df = edgesdat, directed = TRUE)
render_graph(g)
g2 <- g %>%
add_global_graph_attrs(attr = "width",value = 0.5, attr_type = "node") %>% #node size %>%
add_global_graph_attrs(attr = "penwidth",value = 2, attr_type = "edge" ) %>% #edge size
set_node_position(node=nodesdat$id,x = positionsdat$x, positionsdat$y)
Recebo o erro "Erro em !use_labels && !(node %in% graph$nodes_df[, 1]) : 'length = 5' em coerção para 'logical(1)'" na linha set_node_position.
Este erro não acontece quando executo o código no R versão 4.0.2, mas atualizei para 4.4.2
Pode ser o caso de que isso funcionou em uma versão mais antiga do R ou talvez uma versão mais antiga do
DiagrammeR
. Mas pelo menos para a versão mais recente doDiagrammeR
, ou seja,1.0.11
os documentos mencionam queset_node_position
só pode ser usado para definir a posição de um nó por vez, ou seja,node=
deve serPortanto, para corrigir seu problema, defina as posições dos nós para cada nó em sequência, por exemplo, você pode fazer um loop nas linhas
positionsdat
usandoReduce
assim: