He tomado algunas de las cosas que aprendí en un Flowing Data great circle mapping tutorial y las he combinado con código vinculado en los comentarios para evitar que cosas extrañas sucedan cuando R traza grandes círculos trans-ecuatoriales. Eso me da esto:Automatizando la producción de mapas de gran círculo en R
airports <- read.csv("/home/geoff/Desktop/DissertationData/airports.csv", header=TRUE)
flights <- read.csv("/home/geoff/Desktop/DissertationData/ATL.csv", header=TRUE, as.is=TRUE)
library(maps)
library(geosphere)
checkDateLine <- function(l){
n<-0
k<-length(l)
k<-k-1
for (j in 1:k){
n[j] <- l[j+1] - l[j]
}
n <- abs(n)
m<-max(n, rm.na=TRUE)
ifelse(m > 30, TRUE, FALSE)
}
clean.Inter <- function(p1, p2, n, addStartEnd){
inter <- gcIntermediate(p1, p2, n=n, addStartEnd=addStartEnd)
if (checkDateLine(inter[,1])){
m1 <- midPoint(p1, p2)
m1[,1] <- (m1[,1]+180)%%360 - 180
a1 <- antipode(m1)
l1 <- gcIntermediate(p1, a1, n=n, addStartEnd=addStartEnd)
l2 <- gcIntermediate(a1, p2, n=n, addStartEnd=addStartEnd)
l3 <- rbind(l1, l2)
l3
}
else{
inter
}
}
# Unique months
monthyear <- unique(flights$month)
# Color
pal <- colorRampPalette(c("#FFEA00", "#FF0043"))
colors <- pal(100)
for (i in 1:length(monthyear)) {
png(paste("monthyear", monthyear[i], ".png", sep=""), width=750, height=500)
map("world", col="#191919", fill=TRUE, bg="black", lwd=0.05)
fsub <- flights[flights$month == monthyear[i],]
fsub <- fsub[order(fsub$cnt),]
maxcnt <- max(fsub$cnt)
for (j in 1:length(fsub$month)) {
air1 <- airports[airports$iata == fsub[j,]$airport1,]
air2 <- airports[airports$iata == fsub[j,]$airport2,]
p1 <- c(air1[1,]$long, air1[1,]$lat)
p2 <- c(air2[1,]$long, air2[1,]$lat)
inter <- clean.Inter(p1,p2,n=100, addStartEnd=TRUE)
colindex <- round((fsub[j,]$cnt/maxcnt) * length(colors))
lines(inter, col=colors[colindex], lwd=1.0)
}
dev.off()
}
me gustaría para automatizar la producción de mapas para un gran conjunto de datos que contiene todas las rutas comerciales regulares - dummy sample - compartida entre ATL y otros aeropuertos en la red mundial (airports.csv está vinculado a en la publicación Datos de flujo). Preferentemente, produciría un mapa por mes que usaría como marco en un breve video que muestra los cambios en el espacio de la red del aeropuerto de Atlanta.
Problema: No puedo obtener el ciclo para producir más de un PNG, desde solo el primer mes único en cada CSV, cada vez que lo ejecuto. Estoy bastante seguro de que el código de Aaron Hardin 'rompe' la automatización tal como se usa en el tutorial de Flowing Data. Después de tres días de meterme con él y buscar cualquier cosa relevante de R, me doy cuenta de que simplemente carezco de los medios para reconciliar uno con el otro. ¿Alguien puede ayudarme a automatizar el proceso?
¡Hay un reconocimiento de disertación para usted!
le mostrará una gran cantidad de código. Intenta hacer un * * * ejemplo mínimo que todavía no funciona. Por ejemplo, crea un bucle simple que traza una serie muy simple de gráficos. Incluso más simple, deje que cada ciclo simplemente imprima el valor de 'i' y' monthyear [i] '. Apuesto que en el proceso encontrará el error. De lo contrario, publique el ejemplo * mínimo * y alguien podrá ayudarlo. – Andrie
Puede usar 'pdf()' como formato de salida y usar monthyear como etiqueta principal, de esta manera no tiene que abrir y cerrar la conexión de salida de archivo cada vez que esté en su ciclo. – mzuba
@mzuba Sí, pero luego se obtiene un solo archivo pdf, en lugar de un archivo para cada parcela. – Andrie