आर

2011-08-30 23 views
8

में महान-सर्कल नक्शा उत्पादन को स्वचालित करना मैंने फ़्लोइंग डेटा great circle mapping tutorial में सीखा कुछ चीजें ली हैं और आर प्लॉट ट्रांस-इक्वेटोरियल महान सर्कल के दौरान अजीब चीज़ों को होने से रोकने के लिए टिप्पणियों में लिंक किए गए कोड के साथ संयुक्त किया है। यही कारण है कि मुझे देता है यह:आर

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() 
} 

मैं एक बड़ी सभी अनुसूचित वाणिज्यिक मार्गों युक्त डेटासेट के लिए नक्शे के उत्पादन स्वचालित करना चाहते हैं - dummy sample - (airports.csv जुड़ा हुआ है वैश्विक नेटवर्क में ATL और अन्य हवाई अड्डों के बीच साझा किया बहने वाले डेटा पोस्ट में)। अधिमानतः, मैं प्रति माह एक नक्शा तैयार करता हूं कि मैं अटलांटा एयरपोर्ट नेटवर्क स्पेस में बदलावों को दर्शाते हुए एक लघु वीडियो में फ्रेम के रूप में उपयोग करूंगा।

समस्या: मुझे प्रत्येक सीएसवी में केवल पहले अद्वितीय महीने से ही एक से अधिक पीएनजी उत्पन्न करने के लिए लूप नहीं मिल सकता-हर बार जब मैं इसे चलाता हूं। मैं काफी हद तक निश्चित हूं कि हारून हार्डिन का कोड ऑटोमेशन को 'ब्रेक' करता है क्योंकि इसका उपयोग फ़्लोइंग डेटा ट्यूटोरियल में किया जाता है। इसके साथ गड़बड़ करने के तीन दिन बाद और किसी भी प्रासंगिक आर का पीछा करते हुए, मुझे एहसास हुआ कि मुझे बस एक दूसरे के साथ मिलाने के लिए चॉप की कमी है। क्या कोई मुझे प्रक्रिया को स्वचालित करने में मदद कर सकता है?

इसमें आपके लिए एक शोध प्रबंध स्वीकृति है!

+1

करने के लिए अपने कॉल में पूरा पथ और फ़ाइल नाम का उपयोग आप कोड का एक बहुत कुछ दिखा। * न्यूनतम * उदाहरण बनाने का प्रयास करें जो अभी भी काम नहीं करता है। उदाहरण के लिए, एक साधारण लूप बनाएं जो चार्ट की एक बहुत ही सरल श्रृंखला प्लॉट करता है। यहां तक ​​कि सरल, प्रत्येक लूप को बस 'i' और 'monthyear [i]' के मान मुद्रित करने दें। मैं इस प्रक्रिया में शर्त लगाता हूं कि आपको त्रुटि मिल जाएगी। यदि नहीं, तो * न्यूनतम * उदाहरण पोस्ट करें और कोई आपकी मदद करने में सक्षम होगा। – Andrie

+0

आप आउटपुट प्रारूप के रूप में 'पीडीएफ() 'का उपयोग कर सकते हैं और मुख्य लेबल के रूप में माहौल का उपयोग कर सकते हैं, इस तरह आपको अपने लूप में हर बार फ़ाइल आउटपुट कनेक्शन खोलने और बंद करने की आवश्यकता नहीं है। – mzuba

+0

@mzuba हां, लेकिन फिर आपको प्रत्येक प्लॉट के लिए फ़ाइल की बजाय केवल एक ही पीडीएफ फ़ाइल मिलती है। – Andrie

उत्तर

13

टिप्पणी के लिए बहुत अधिक जानकारी, इसलिए मैं इसके बजाय एक उत्तर पोस्ट करता हूं। यहां मैं सोचता हूं (और यह देखने के लिए अंत में पढ़ें कि संभावित रूप से समस्या क्या हो सकती है):

मैंने फ़्लोइंग डेटा ट्यूटोरियल में मूल डेटा पर अपना कोड चलाने का प्रयास किया है। (जाहिर है आप मासिक डेटा के लिए एक स्तंभ जोड़ने के लिए है, तो मैं बस महीने :) randomise को यह लाइन कहा:

airports <- read.csv("http://datasets.flowingdata.com/tuts/maparcs/airports.csv", 
        header=TRUE) 
flights <- read.csv("http://datasets.flowingdata.com/tuts/maparcs/flights.csv", 
        header=TRUE, as.is=TRUE) 

# Add column with random data for month 
flights$month <- sample(month.abb[1:4], nrow(flights), replace=TRUE) 

जब भी मैं एक पाश है कि एक लंबे समय से चलाने के लिए लगता है, मैं आम तौर पर एक सा रहना वहां कोड का जो मुझे प्रगति की जांच देता है। अपनी फैंसी क्या लेता है: print, cat, tcltk::tkProgressBar। मैं message का उपयोग करें:

for (i in 1:length(monthyear)) { 
    message(i) 
    # 
    # your code here 
    # 
} 

वैसे भी, मैं तो अपने कोड भाग गया। सब ठीक उसी तरह काम करता है जैसा इसे करना चाहिए। जब से मैं चार महीने के डेटा के नमूना, मैं मिलता है:

  • मैं की वर्तमान यात्रा के साथ संदेश में चार बार
  • चार png भूखंडों, प्रत्येक प्रिंट एक अंधेरे दुनिया के नक्शे और चमकीले पीले लाइनों के साथ।

enter image description here


तो, क्यों यह मेरे मशीन पर काम करता है और न तुम्हारा: यहाँ चार पंक्तियों में से एक है?

मैं केवल अनुमान लगा सकता हूं, लेकिन मेरा अनुमान है कि आपने कार्यशील निर्देशिका निर्धारित नहीं की है। आपके कोड में setwd नहीं है, और png पर कॉल केवल फ़ाइल नाम देता है। मुझे संदेह है कि आपका कोड आपके सिस्टम में जो भी काम कर रहा है, उस पर लिखा जा रहा है।

डिफ़ॉल्ट रूप से, मेरी स्थापना पर, कार्यशील निर्देशिका है:

getwd() 
[1] "C:/Program Files/eclipse 3.7" 

इस हल करने के लिए, निम्न में से एक कार्य करें:

  1. उपयोग setwd() के शीर्ष पर अपनी कार्यशील निर्देशिका स्थापित करने के लिए आपकी लिपि
  2. या png()
+1

+1 पूरी तरह से विचार किए गए उत्तर के लिए +1 (हमेशा की तरह!) – Ramnath

+0

ऐसा लगता है कि यह एक बड़ी मदद होगी। मैं आज परियोजना में नहीं पहुंच पा रहा हूं लेकिन मैं आपको बता दूंगा कि जब मैं करता हूं तो यह कैसे जाता है। धन्यवाद। – gpe