La visualización de redes incorpora aspectos matemĆ”ticos y algorĆtmicos junto con elementos estĆ©ticos.
La visualización de un grafo \(G=(V,E)\) consiste en crear representaciones geomĆ©tricas de grafos utilizando sĆmbolos para los vĆ©rtices \(v \in V\) y curvas suaves para las aristas \(e \in E\).
El objetivo consiste en comunicar adecuadamente la información relacional siguiendo los principios fundamentales de una visualización:
Tomado de https://kateto.net/network-visualization .
¿CuÔl es el propósito que debe cumplir la visualización?
¿CuÔles son las propiedades que se quieren resaltar?
Tomado de https://kateto.net/network-visualization .
Hay disponibles diferentes tipos de visualización.
Tomado de https://kateto.net/network-visualization .
Uno de los temas centrales de la visualización de grafos es el diseño del grafo (graph layout), i.e., la ubicación de los vértices y las aristas en el espacio bidimensional.
Los grafos de tamaƱo no trivial deben dibujarse utilizando mƩtodos automatizados.
Se usan algoritmos que solucionan los problemas de optimización derivados del propósito de la representación automÔtica.
Los diseƱos buscan minimizar las superposiciones de vƩrtices y el cruce de aristas.
Tomado de https://kateto.net/network-visualization .
Hay disponibles varios diseƱos en igraph, entre
ellos:
layout_as_bipartite().layout_as_star().layout_as_tree().layout_in_circle().layout_nicely().layout_on_grid().layout_on_sphere().layout_randomly().layout_with_dh().layout_with_fr().layout_with_gem().layout_with_graphopt().layout_with_kk().layout_with_lgl().layout_with_mds().layout_with_sugiyama().Estos diseños producen un arreglo de \(n \times 2\), con \(n = \lvert V \rvert\), que contiene las coordenadas de los vértices en \(\mathbb{R}^2\) empleadas en la visualización.
Red de interacción de personajes de la temporada 1 de la serie de HBO Juego de Tronos.
Esto datos fueron recolectados para estudiar la dinƔmica de los Siete Reinos de Juego de Tronos.
Los personajes estÔn conectados mediante aristas ponderadas por el número de interacciones de los personajes.
Una descripción completa de los datos se puede encontrar aquĆ.
Disponible este enlace de GitHub.
# datos
setwd("~/Dropbox/UN/netwroks_lectures")
dat_nodes <- read.csv("got-s1-nodes.csv")
dat_edges <- read.csv("got-s1-edges.csv")## Id Label
## 1 ADDAM_MARBRAND Addam
## 2 AEGON Aegon
## 3 AERYS Aerys
## 4 ALLISER_THORNE Allister
## 5 ARYA Arya
## 6 ASSASSIN Assassin
## Source Target Weight Season
## 1 NED ROBERT 192 1
## 2 DAENERYS JORAH 154 1
## 3 JON SAM 121 1
## 4 LITTLEFINGER NED 107 1
## 5 NED VARYS 96 1
## 6 DAENERYS DROGO 91 1
# grafo
got <- graph_from_data_frame(d = dat_edges[,c(1,2)], vertices = dat_nodes$Id, directed = "F")
E(got)$weight <- dat_edges$Weight## [1] 126
## [1] 549
## [1] FALSE
## [1] TRUE
layout_nicely
Selecciona automĆ”ticamente un diseƱo apropiado segĆŗn las caracterĆsticas
del grafo. En grafos conexos y con menos de 1000 vƩrtices suele usar
FruchtermanāReingold, y en caso contrario DrL (Distributed Recursive
Layout).
layout_with_dh (DavidsonāHarel) Ubica
los nodos minimizando un criterio global de ābuena aparienciaā mediante
un proceso de optimización estocÔstica. Es mÔs costoso y puede depender
de la configuración de parÔmetros.
layout_with_fr
FruchtermanāReingold
DiseƱo por fuerzas que equilibra āatracciónā en las aristas y
ārepulsiónā entre nodos. Produce distribuciones que separan grupos y
reducen solapamientos de manera razonable.
layout_with_kk (KamadaāKawai) DiseƱo
por āresortesā que intenta que las distancias euclidianas reflejen las
distancias geodƩsicas del grafo. Suele dar buenas representaciones en
grafos pequeƱos o medianos, pero escala peor en grafos grandes.
# diseƱos
set.seed(123)
l_n <- layout_nicely (got)
l_dh <- layout_with_dh(got)
l_fr <- layout_with_fr(got)
l_kk <- layout_with_kk(got)# visualización
par(mfrow = c(2,2), mar = c(4, 3, 3, 1))
plot(got,
layout = l_n,
vertex.size = 4,
vertex.label = NA,
vertex.color = "black",
vertex.frame.color = "black")
title(main = "Nicely")
plot(got,
layout = l_dh,
vertex.size = 4,
vertex.label = NA,
vertex.color = "black",
vertex.frame.color = "black")
title(main = "Davidson-Harel")
plot(got,
layout = l_fr,
vertex.size = 4,
vertex.label = NA,
vertex.color = "black",
vertex.frame.color = "black")
title(main = "Fruchterman-Reingold")
plot(got,
layout = l_kk,
vertex.size = 4,
vertex.label = NA,
vertex.color = "black",
vertex.frame.color = "black")
title(main = "Kamada-Kawai")Si bien la posición de los vĆ©rtices y la ubicación de las aristas es importante en la visualización de grafos, la información adicional se puede incorporar en las visualizaciones variando caracterĆsticas como el tamaƱo, la forma y el color de los vĆ©rtices y las aristas.
Red de referencias on-line entre blogs polĆticos franceses clasificados por el proyecto Observatoire Presidentielle en relación con su afiliación polĆtica.
Un enlace indica que al menos uno de los dos blogs hace referencia al otro en su pƔgina web.
Una descripción completa de los datos se puede encontrar aquĆ.
Disponible en el paquete sand de R.
# install.packages("sand")
suppressMessages(suppressWarnings(library(sand)))
# data
data(fblog)
fblog <- upgrade_graph(fblog)## [1] 192
## [1] 1431
## [1] FALSE
## [1] FALSE
# decoración
cols <- RColorBrewer::brewer.pal(n = 9, name = "Set1")
partido_num <- as.numeric(as.factor(V(fblog)$PolParty))
V(fblog)$color <- cols[partido_num]
E(fblog)$color <- adjustcolor("black", 0.1)
# visualización
set.seed(123)
plot(fblog,
layout = layout_with_fr,
vertex.size = 4,
vertex.label = NA,
vertex.frame.color = cols[partido_num],
main = "Referencias on-line")# contracción
fblog_c <- contract(graph = fblog, mapping = partido_num)
E(fblog_c)$weight <- 1
fblog_c <- simplify(fblog_c)
# decoración
partido_tam <- as.vector(table(V(fblog)$PolParty))
V(fblog_c)$size <- 5*sqrt(partido_tam)
E(fblog_c)$width <- sqrt(E(fblog_c)$weight)
# visualización
set.seed(123)
plot(fblog_c,
vertex.label = NA,
vertex.color = cols,
vertex.frame.color = cols,
main = "Referencias on-line")Usando ggraph.
Usando visNetwork.
Usando networkD3.