2016-08-19 10 views
-1
Arbeits

Der folgende Code gut für das Zeichnen von Polygonen arbeitetGefüllte Polygone in R mit ggplot nicht

SP <- SpatialPolygons(spd) 
centroids <- coordinates(SP) 
x <- centroids[,1] 
y <- centroids[,2] 
SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, row.names = row.names(SP))) 
ggplot(data = SP1, aes(x = long, y = lat, group = group)) + geom_path() 

Stattdessen, wenn ich die letzten beiden Zeilen des Codes ändern, um diese Polygone zu füllen, basierend auf einem Wert Vektor es nicht funktioniert :

penetration <- runif(n = length(SP), min = 1, max = 10) 
SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, value = penetration, row.names = row.names(SP))) 
ggplot(data = SP1, aes(x = long, y = lat, group = group)) + geom_polygon(aes(fill=SP1$value)) 

spd wird mit Daten aus der folgenden Verbindung erstellt:

Datenquelle: https://www.google.com/maps/d/viewer?mid=1mf9TQY3bocarO4SaIXAtco_C1LE&hl=en_US

I extrahiert dann Koordinaten aus der KML-Datei ... die dann in eine Liste von Polygonen ist so, dass ich es mit etwas Plotten Funktion ziehen könnte ...

tkml <- getKMLcoordinates(kmlfile="Pune all Electoral Wards.kml", ignoreAltitude=T) 
len <-length(tkml) 

del <- NA 
for(i in 1:len) 
{ 
    if(length(tkml[[i]]) == 2) 
    del <- c(del, i) 
} 
del <- del[-1] 
tkmlCleaned <- tkml[!tkml %in% tkml[del]] 
size <- length(tkmlCleaned) 
sr <- vector(mode = "list", length = size) 
srs <- vector(mode = "list", length = size) 
spd <- list() 
for(j in 1:length(sr)) 
{ 

    sr[[j]] <- Polygon(tkmlCleaned[[j]]) 
    srs[[j]] <- Polygons(list(sr[[j]]), j) 
    spd <- c(srs[[j]], spd) 
} 
+0

Was ist 'spd'? Können Sie einen Datensatz hinzufügen, um dies reproduzierbar zu machen? – steveb

+0

Da ich nicht gewohnt bin, im Stack-Überlauf zu posten, bitte keine Fehler bei der Formatierung – Aditya

+0

Es ist am besten, Daten mit 'dput' bereitzustellen. Um 'spd' zu erhalten, würden Sie folgendes tun:' dput (spd) ' – steveb

Antwort

0

ich, dass die Art und Weise fand ich Polygon verschmolzen Fülldaten mit Polygondaten sind nicht mit dem Datenformat für ggplot kompatibel. So ist der folgende Code nicht funktioniert

SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, value = penetration, row.names = row.names(SP))) 

Zunächst müssen wir die Fortify Befehl von ggplot2 Bibliothek verwenden

SP1 <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, row.names = row.names(SP))) 
abc <- fortify(SP1) 

SP1 data snapabc data snap

Kenntnis, wie die Daten bei der Anwendung von Fortify Befehl in lat gestapelt wird , lange, ID, Gruppe usw. Spalten.

Die ID-Spalte stammt aus dem Befehl Polygone, wobei jedem Polygon eine ID zugewiesen wird, wie im folgenden Code gezeigt. Das zweite Argument in den Polygonen Funktion ist für die ID

for(j in 1:length(sr)) 
{ 

    sr[[j]] <- Polygon(tkmlCleaned[[j]]) 
    srs[[j]] <- Polygons(list(sr[[j]]), j) 
    spd <- c(srs[[j]], spd) 
} 

auf Daten in einer Art und Weise zu verbinden, die durch ggplot lesbar ist, I die Funktion inner_join aus dplyr-Bibliothek verwendet. Bitte beachten Sie, dass das dplyr-Paket nicht für R 3.1.0 verfügbar ist, ich habe es auf die neueste Version aktualisiert.

cde <- inner_join(abc, wardDensity1, by = "id") 

Eindringen gegen Id durch Verschmelzung abgebildet wird, wenn wir die inner_join Funktion und das Ergebnis ist, lesbar durch ggplot

wardDensity enthält id (die in diesem Fall Wahlbezirk Name) und Bevölkerung dieses Ward verwenden

baseHeatMap <- ggplot(data = cde, aes(long , lat, group = group, fill = penetration)) + geom_polygon(color = "black")