2014-07-15 13 views
5

Ho uno shapefile (SpatialLinesDataFrame) contenente tutte le strade di Colonia, che possono essere scaricate da here. Ho unito questo @ data con i dati di una fonte esterna. Come posso tracciare queste strade (se possibile su una mappa di google usando ggmaps), in modo che ogni strada abbia un diverso colore (o spessore), a seconda del suo valore individuale?Come stampare e colorare le strade in SpatialLinesDataFrame con ggplot/ggmap?

Finora, ho fatto questo:

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

a questo punto aggiungo un'altra colonna al telaio dei dati dei dati SHP @, che contiene un certo valore per ogni strada. Poi ho fortifiy lo shapefile in modo che possa essere tracciata utilizzando 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") 

Quando uso geom_lines, le linee non vanno bene e non sono facili da identificare:

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

Here ho visto che uno potrebbe trasformare lo shapefile in modo che geom_segement (o in questo caso una funzione modificata "geom_segment2") possa essere usato, ma poi perderebbe i miei valori specifici per la strada.

+0

Il tuo shapefile sembra avere> 5500 strade. Vuoi che ognuno di loro sia di un colore diverso? Inoltre, la tabella degli attributi non ha una colonna 'values'. – jlhoward

+0

Ho confrontato la @data con un file di dati esterno (che non posso caricare per motivi di privacy). Solo quelle strade sono ancora lasciate nello shapefile, che sono nel mio file di dati originale. Quindi aggiungo i valori dal file esterno allo shapefile @ data dataframe. In questo momento mi rendo conto che posso caricare lo shapefile modificato, lo farò domani. La colonna dei valori è nel mio shapefile, contiene ad esempio valori da 1 a 10, ma questo è simulato. Quando uso geom_line() alcune parti di certe linee (strade) sono piene di forme simili al colore, sai perché? –

+0

Per i principianti, è necessario utilizzare 'geom_path (...)', non 'geom_line (...). – jlhoward

risposta

3

Quindi questo codice afferra le 100 strade più lunghe del tuo shapefile, assegna casualmente "valori" a (1,10) e traccia quello con colore in base al valore, sopra un'immagine google raster di Colonia.

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

E 'possibile effettuare la chiamata ggmap(...) più semplice utilizzando, ad esempio,

ggmap(get_map("Cologne")) 

ma c'è un problema: l'argomento zoom=... viene interpretato in modo diverso e non era in grado di ingrandire sufficientemente la mappa.

Problemi correlati