El primer paso es importar las bibliotecas o paquetería necesarias para hacer grafos
Las siguientes líneas de código se deben ejecutar para instalar las biliotecas: install.packages(“igraph”) install.packages(“reshape2”)
library(igraph)
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(reshape2)
Lo siguiente que hay que hacer es importar los datos del csv con que vamos a trabajar
matriz <- read.csv("matriz2.csv", row.names = 1)
En este paso convertiremos la variable a una matriz de tres columnas
matriz_larga <- melt(as.matrix(matriz))
y luego le asignaremos un nuevo nombre a cada columna. Los nombres actuales son Var1, Var2 y value. Si queremos ver los nombres, podemos ejecutar la función colnames(matriz_larga)
colnames(matriz_larga)
## [1] "Var1" "Var2" "value"
Cambiar el nombre nos permite tener un mejor entendimiento de lo que tenemos en nuestro conjunto de datos
colnames(matriz_larga) <- c("Personaje", "Tema", "Peso")
matriz_larga <- matriz_larga[!is.na(matriz_larga$Peso) & matriz_larga$Peso > 0, ]
grafo <- graph_from_data_frame(d = matriz_larga, directed = FALSE)
En la siguiente instrucción se van a pintar los nodos del grafo. La función plot(grafo,…) es la que va a mostrar el dibujo.
Dentro de la función, el tamaño del grafo lo da vertex.size = 10. El número indica el tamaño en pixeles. Para la cantidad de información que venimos trabajando, 10 pixeles es una mejor opción.
vertex.label.cex ajusta el tamaño de las etiquetas de los nodos. Según la escala que maneja, 1 es un tamaño normal; un valor menor que 1 es más pequeño y un valor mayor a 1 es más grande de lo normal.
edge.width ajusta el grosor de las aristas. En el código presentado, el grosor de cada arista estará dado por su valor dentro de la matriz dividido entre 3 para que las aristas más pesadas no se vean demasiado gruesas.
plot(grafo,
vertex.size = 10, #Tamaño del nodo
vertex.label.cex = 0.85, #Tamaño de la etiqueta
edge.width = E(grafo)$Peso / 3, # Grosor de las aristas
main = "Grafo de Correspondencia")
La siguiente sección es sólo para mostrar de mejor forma el grafo. El primer paso para usar las formas de distribución es la siguiente línea
# 1. Definir el atributo 'type' para cada nodo
# Personajes = TRUE, Temas = FALSE
V(grafo)$type <- V(grafo)$name %in% rownames(matriz)
# Aplicar layout bipartito
plot(grafo,
layout = layout_as_bipartite(grafo),
vertex.color = ifelse(V(grafo)$type, "lightblue", "lightgreen"),
vertex.size = 30,
vertex.label.cex = 0.8,
edge.width = E(grafo)$Peso / 5,
main = "Grafo Bipartito")
# Graficar con layout
plot(grafo,
layout = layout_in_circle(grafo),
vertex.color = ifelse(V(grafo)$type, "lightblue", "lightgreen"),
vertex.size = 30,
vertex.label.cex = 0.8,
edge.width = E(grafo)$Peso / 5,
main = "Grafo de Correspondencia")
# Graficar con layout
plot(grafo,
layout = layout_with_fr(grafo),
vertex.color = ifelse(V(grafo)$type, "lightblue", "lightgreen"),
vertex.size = 30,
vertex.label.cex = 0.8,
edge.width = E(grafo)$Peso / 5,
main = "Grafo de Correspondencia")