Visualizando números irracionales
Un número irracional es aquel que no se puede expresar como fracción de enteros, o equivalentemente, que tiene infinitos decimales no periódicos.
En esta publicación se utilizarán diagramas de cuerdas para visualizar con R los primeros decimales de los 3 números irracionales más famosos: \(\pi\)
, \(\varphi\)
y \(e\)
.
Visualizando los primeros 1000 decimales de \(\pi\)
Preprocesamiento
# Carga de paquetes
library(circlize)
library(dplyr)
# 1000 decimales de PI
decimales <- "1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"
# Separar los decimales
decimales %>%
strsplit(split = "") %>%
unlist -> decimales
length(decimales)
## [1] 1000
Vamos a crear un data.frame
con las conexiones entre números: como origen estará cada decimal, y como destino su siguiente número en la secuencia de decimales.
origen <- NA
destino <- NA
for(i in 2:length(decimales)){
origen <- c(origen, decimales[i - 1])
destino <- c(destino, decimales[i])
}
data <- data.frame(origen, destino)
# Se quitan los NA del principio
data <- data[-1,]
head(data)
## origen destino
## 2 1 4
## 3 4 1
## 4 1 5
## 5 5 9
## 6 9 2
## 7 2 6
Gráfico
grid.col <- rainbow(10)
names(grid.col) <- 0:9
chordDiagram(data, row.col = grid.col, grid.col = grid.col,
order = 0:9, transparency = 0.2,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
Gráfico agrupado
También podemos agrupar las conexiones si tienen el mismo origen y destino.
adjacencyData <- with(data, table(origen, destino))
adjacencyData
## destino
## origen 0 1 2 3 4 5 6 7 8 9
## 0 7 10 10 9 4 14 8 6 9 16
## 1 10 16 11 12 10 7 6 18 10 16
## 2 11 15 8 11 7 8 9 14 13 7
## 3 15 10 9 10 12 8 9 12 12 5
## 4 7 7 8 7 11 8 16 5 13 11
## 5 6 10 11 15 8 6 10 7 8 16
## 6 14 9 12 6 13 9 11 8 6 6
## 7 9 13 8 10 7 12 5 9 13 9
## 8 6 17 13 8 10 9 11 9 9 9
## 9 8 8 13 14 11 16 9 7 8 11
grid.col <- rainbow(10)
names(grid.col) <- 0:9
chordDiagram(adjacencyData, row.col = grid.col, grid.col = grid.col,
link.border = "black", transparency = 0,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
Explorando paletas de colores
Los gráficos anteriores estaban hechos con la paleta rainbow
. Ahora, probamos con algunas paletas de colores de RColorBrewer
.
library(RColorBrewer)
grid.col <- brewer.pal(10, "Paired")
names(grid.col) <- 0:9
chordDiagram(data, row.col = grid.col, grid.col = grid.col,
order = 0:9, transparency = 0.2,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
chordDiagram(adjacencyData, row.col = grid.col, grid.col = grid.col,
link.border = "black", transparency = 0,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
grid.col <- brewer.pal(10, "RdYlBu")
names(grid.col) <- 0:9
chordDiagram(data, row.col = grid.col, grid.col = grid.col,
order = 0:9, transparency = 0.2,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
chordDiagram(adjacencyData, row.col = grid.col, grid.col = grid.col,
link.border = "black", transparency = 0,
annotationTrack = c("name", "grid"))
title(expression(paste("Visualizando ", pi)))
text(1.05, -1, "danielredondo.com", font = 8)
text(-0.015, 0.015, expression(pi))
Más gráficos
Con leves modificaciones al código, se pueden visualizar también los primeros 1000 decimales de \(e\)
con otro estilo:
Y los primeros 1000 decimales de \(\varphi\)
, con un estilo diferente: