ho preso alcune delle cose che ho imparato in un flusso di dati great circle mapping tutorial e li combina con codice legato nei commenti per evitare che cose strane accada quando R trame grandi cerchi trans-equatoriali. Questo mi dà questo:Automatizzare grande cerchio la produzione di mappe in 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()
}
mi piacerebbe automatizzare la produzione di mappe per un grande insieme di dati che contiene tutte le rotte commerciali di linea - dummy sample - condivisa tra ATL e altri aeroporti nella rete globale (airports.csv è collegato nel post di Flowing Data). Preferibilmente, produrrei una mappa al mese che userei come cornice in un breve video che descrive i cambiamenti nello spazio della rete aeroportuale di Atlanta.
Il problema: non riesco a ottenere il ciclo per la produzione di più di un PNG-da solo il primo mese unico in ogni CSV-ogni volta che l'eseguo. Sono abbastanza certo che il codice di Aaron Hardin "rompa" l'automazione così come è usata nel tutorial di Flowing Data. Dopo tre giorni di incasinatori e inseguimento di qualsiasi R how-to, mi rendo conto che mi mancano semplicemente le costolette per riconciliare l'una con l'altra. Qualcuno può aiutarmi ad automatizzare il processo?
C'è un riconoscimento di tesi per te!
si mostra un sacco di codice. Prova a fare un esempio * minimo * che ancora non funziona. Ad esempio, crea un semplice ciclo che traccia una serie molto semplice di grafici. Ancora più semplice, lascia che ogni ciclo stampi semplicemente il valore di 'i' e' monthyear [i] '. Scommetto che nel processo troverai l'errore. In caso contrario, pubblica l'esempio * minimo * e qualcuno sarà in grado di aiutarti. – Andrie
È possibile utilizzare 'pdf()' come formato di output e utilizzare monthyear come etichetta principale, in questo modo non è necessario aprire e chiudere la connessione di output del file ogni volta nel ciclo. – mzuba
@mzuba Sì, ma in questo caso si ottiene solo un singolo file PDF, anziché un file per ogni trama. – Andrie