[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon schochastics, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)
Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.
Este post apresenta layout_as_multilevel()
, uma nova função no pacote {{graphlayouts}}. Como o nome sugere, esse
A função pode ser usada para visualizar redes multiníveis.
Uma rede multinível consiste em dois (ou mais) níveis
com diferentes conjuntos de nós e vínculos intra-nível. Por exemplo, um nível poderia ser cientistas e seus laços de colaboração e os
o segundo nível são laboratórios e laços entre eles, e as arestas entre níveis são as afiliações de cientistas e laboratórios.
O pacote {{graphlayouts}} contém uma rede multinível artificial (formato igraph) que será usada ao longo deste post.
data("multilvl_ex", package = "graphlayouts")
O pacote assume que uma rede multinível possui um atributo de vértice chamado lvl
qual
mantém as informações de nível (1 ou 2).
library(igraph)
library(graphlayouts)
library(ggraph)
library(threejs)
O algoritmo subjacente de layout_as_multilevel()
tem três versões diferentes,
que pode ser usado para enfatizar diferentes recursos estruturais de uma rede multinível.
Independentemente da opção escolhida, o algoritmo produz internamente um layout 3D, onde
cada nível é posicionado em um plano y diferente. O layout 3D é então mapeado para 2D com um projeção isométrica.
Os parametros alpha
e beta
controlar a perspectiva da projeção.
Os valores padrão parecem funcionar em muitas instâncias, mas nem sempre são ideais.
Como diretriz aproximada: beta
gira o gráfico em torno do eixo y (em 3D) e alpha
move o POV para cima ou para baixo.
Contents
Layout completo
Um layout para toda a rede pode ser calculado via layout_as_multilevel()
configuração type = "all"
.
Internamente, o algoritmo produz um layout de tensão 3D restrito (cada nível em um plano y diferente) que é então
projetado para 2D. Esse layout ignora possíveis diferenças em cada nível e otimiza apenas o layout geral.
xy
Para visualizar a rede com o {{ggraph}}, convém desenhar as arestas de cada nível (e arestas entre níveis)
com um geom de borda diferente. Isso lhe dá mais flexibilidade para controlar a estética e pode ser facilmente alcançado
com um filtro.
ggraph(multilvl_ex, "manual", x = xy[, 1], y = xy[, 2]) +
geom_edge_link0(
aes(filter = (node1.lvl == 1 & node2.lvl == 1)),
edge_colour = "firebrick3",
alpha = 0.5,
edge_width = 0.3
) +
geom_edge_link0(
aes(filter = (node1.lvl != node2.lvl)),
alpha = 0.3,
edge_width = 0.1,
edge_colour = "black"
) +
geom_edge_link0(
aes(filter = (node1.lvl == 2 &
node2.lvl == 2)),
edge_colour = "goldenrod3",
edge_width = 0.3,
alpha = 0.5
) +
geom_node_point(aes(shape = as.factor(lvl)), fill = "grey25", size = 3) +
scale_shape_manual(values = c(21, 22)) +
theme_graph() +
coord_cartesian(clip = "off", expand = TRUE) +
theme(legend.position = "none")
Layouts separados para os dois níveis
Em muitos casos, pode haver diferentes propriedades estruturais inerentes aos níveis de
a rede. Nesse caso, duas funções de layout podem ser passadas para layout_as_multilevel()
lidar
com essas diferenças. Em nossa rede artificial, o nível 1 tem uma estrutura de grupo oculto e o nível 2
possui uma estrutura núcleo-periferia.
Para usar esta opção de layout, defina type = "separate"
e especifique duas funções de layout com FUN1
e FUN2
.
Você pode alterar os parâmetros internos dessas funções de layout com listas nomeadas no params1
e params2
argumento. Observe que esta versão otimiza as arestas entre níveis apenas minimamente. A ênfase está no
estruturas intra-nível.
xy
Novamente, tente incluir um geom de borda para cada nível.
cols2
Corrija apenas um nível
Esse layout pode ser usado para enfatizar uma estrutura intra-nível. O layout
do segundo nível é calculado de maneira a otimizar o posicionamento da aresta entre níveis.
Conjunto type = "fix1"
e especifique FUN1
e possivelmente params1
para corrigir o nível 1 ou definir type = "fix2"
e especifiqueFUN2
e possivelmente params2
para corrigir o nível 2.
xy
Em vez da projeção 2D padrão, layout_as_multilevel()
também pode retornar o layout 3D
definindo project2d = FALSE
. O layout 3D pode então ser usado com, por exemplo {{threejs}} para produzir uma interação
Visualização em 3D.
xyz
Relacionado