2014-07-15 12 views
5

मुझे एक आकारफाइल (स्पैटियललाइनसटाफ्रेम) मिला है जिसमें कोलोन में सभी सड़कों हैं, जिन्हें here से डाउनलोड किया जा सकता है। मैंने इस स्रोत को बाहरी स्रोत से डेटा के साथ विलय कर दिया। मैं इन सड़कों को कैसे प्लॉट कर सकता हूं (यदि संभव है तो Google मानचित्र पर ggmaps का उपयोग करके), ताकि प्रत्येक सड़क के अलग-अलग रंग (या मोटाई) हो, इसके व्यक्तिगत मूल्य के आधार पर? इस बिंदु मैं shp @ डेटा डेटा फ्रेम, जो प्रत्येक सड़क के लिए एक निश्चित मान के लिए एक और स्तंभ जोड़ने परggplot/ggmap के साथ spatialLinesDataFrame में सड़कों को साजिश और रंग कैसे करें?

shapefile <- readOGR(shapfile, "Strasse", stringsAsFactors=FALSE, 
encoding="latin-9") 
shp <- spTransform(shapefile, CRS("+proj=longlat +datum=WGS84")) 

:

अब तक, मैं इस किया है। तब मैं शेपफ़ाइल fortifiy तो यह ggplot का उपयोग कर साजिश रची जा सकता है:

shp$id <- rownames([email protected]) 
shp.df <- as.data.frame(shp) 
data_fort <- fortify(shp, region = "id") 
data_merged <- join(data_fort, shp.df, by="id") 

जब मैं geom_lines उपयोग करते हैं, लाइनों अच्छा नहीं लग रही है और यह पहचान करने के लिए आसान नहीं हैं करते हैं:

ggplot(data_merged, aes(x=long, y=lat, 
         group=group, 
         colour=values)) + 
geom_line() 

Here मैं कि देखा कोई आकारफाइल को बदल सकता है ताकि geom_segement (या इस मामले में एक संशोधित फ़ंक्शन "geom_segment2") का उपयोग किया जा सके, लेकिन फिर मेरी सड़क विशिष्ट मानों को खो देगा।

+0

आपकी आकृति फ़ाइल में 5500 सड़कों की प्रतीत होती है। क्या आप चाहते हैं कि उनमें से प्रत्येक एक अलग रंग हो? साथ ही, विशेषता तालिका में 'मान' कॉलम नहीं है। – jlhoward

+0

मैंने @ डेटा को बाहरी डेटा फ़ाइल से मिलान किया (जिसे मैं गोपनीयता कारणों से अपलोड नहीं कर सकता)। केवल उन सड़कों को अभी भी आकार फ़ाइल में छोड़ दिया गया है, जो मेरी मूल डेटा फ़ाइल में हैं। फिर मैं बाहरी फ़ाइल से मूल्यों को आकार फ़ाइल @ डेटा डेटा फ्रेम में जोड़ता हूं। अभी मुझे एहसास है कि मैं संशोधित आकारफाइल अपलोड कर सकता हूं, कल वह करूँगा। मूल्य कॉलम मेरे आकारफाइल में है, इसमें उदाहरण के लिए 1-10 से मान शामिल हैं, लेकिन यह अनुकरण किया गया है। जब मैं geom_line() का उपयोग करता हूं कुछ निश्चित रेखाओं (सड़कों) के कुछ हिस्सों को रंगों से रंग भर दिया जाता है, तो क्या आप जानते हैं कि ऐसा क्यों है? –

+0

स्टार्टर्स के लिए, आपको 'geom_path (...)', 'geom_line (...) का उपयोग करने की आवश्यकता नहीं है। – jlhoward

उत्तर

3

तो यह कोड आपके आकारफाइल से 100 सबसे लंबी सड़कों को पकड़ता है, जो कोलोन के Google रास्टर छवि के शीर्ष पर मूल्य पर आधारित रंगों के साथ यादृच्छिक रूप से "मान" (1,10) असाइन करता है।

library(ggplot2) 
library(ggmap)   # for ggmap(...) and get_map(...) 
library(rgdal)   # for readOGR(...) 
library(plyr)   # for join(...) 
set.seed(1)    # for reproducible example 
setwd(" <directory with your shapefiles> ") 
spl <- readOGR(dsn=".", "Strasse", encoding="latin-9") 
spl <- spl[spl$SHAPE_LEN %in% tail(sort(spl$SHAPE_LEN),100),] 
shp  <- spTransform(spl, CRS("+proj=longlat +datum=WGS84")) 
shp.df <- data.frame(id=rownames([email protected]), 
         values=sample(1:10,length(shp),replace=T), 
         [email protected], stringsAsFactors=F) 

data_fort <- fortify(shp) 
data_merged <- join(data_fort, shp.df, by="id") 

ggmap(get_map(unlist(geocode("Cologne")),zoom=11))+ 
    geom_path(data=data_merged,size=1, 
      aes(x=long,y=lat,group=group,color=factor(values)))+ 
    labs(x="",y="")+ 
    theme(axis.text=element_blank(),axis.ticks=element_blank()) 

यह उपयोग कर रहा है, जैसे,

ggmap(get_map("Cologne")) 

ggmap(...) कॉल को आसान बनाने के लिए संभव है, लेकिन वहाँ एक समस्या है: zoom=... तर्क अलग तरह से व्याख्या की है और मैं नहीं कर पाया था मानचित्र को ज़ूम ज़ूम करें।

संबंधित मुद्दे