Ich bin nicht, dass bei der Netzwerkanalyse erfahren, so muß ich gestehen, nicht jede einzelne Zeile Code zu verstehen, wie folgt durchgeführt wurde. Aber es funktioniert! Eine Menge des Materials wurde von hier angepasst: https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html
Das sind die endgültigen Ergebnisse ist:
-Code
# Load packages
library(raster) # loads shapefile
library(igraph) # build network
library(spdep) # builds network
library(RColorBrewer) # for plot colour palette
library(ggplot2) # plots results
# Load Data
powiaty <- shapefile("powiaty/powiaty")
Zunächst wird die poly2nb
Funktion wird verwendet, den Nachbarregionen zu berechnen:
# Find neighbouring areas
nb_q <- poly2nb(powiaty)
Dies schafft unser räumliches Gitter, die wir hier sehen können:
# Plot original results
coords <- coordinates(powiaty)
plot(powiaty)
plot(nb_q, coords, col="grey", add = TRUE)
Dies ist das Bit, wo ich nicht 100% sicher bin, was geschieht. Grundsätzlich ist es Ausarbeiten den kürzesten Abstand zwischen allen Shape-Dateien in dem Netzwerk, und liefert eine Matrix dieser Paare.
# Sparse matrix
nb_B <- nb2listw(nb_q, style="B", zero.policy=TRUE)
B <- as(nb_B, "symmetricMatrix")
# Calculate shortest distance
g1 <- graph.adjacency(B, mode="undirected")
dg1 <- diameter(g1)
sp_mat <- shortest.paths(g1)
Nachdem die Berechnungen können die Daten nun in Plotten Format zu bekommen gemacht werden formatiert, so ist die kürzeste Weg Matrix mit dem räumlichen Datenrahmen verschmolzen.
Ich war nicht sicher, was am besten als ID für die Bezugnahme auf Datensätze verwenden würde, also wählte ich die Variable.
# Name used to identify data
referenceCol <- powiaty$jpt_kod_je
# Rename spatial matrix
sp_mat2 <- as.data.frame(sp_mat)
sp_mat2$id <- rownames([email protected])
names(sp_mat2) <- paste0("Ref", referenceCol)
# Add distance to shapefile data
[email protected] <- cbind([email protected], sp_mat2)
[email protected]$id <- rownames([email protected])
Die Daten sind jetzt in einem geeigneten Format zur Anzeige. die Grundfunktion spplot
verwenden, können wir ganz schnell eine Grafik erhalten:
displaylayer <- "Ref1261" # id for Krakow
# Plot the results as a basic spplot
spplot(powiaty, displaylayer)
Ich ziehe ggplot zum Plotten komplexes Diagramme, wie Sie das Styling leichter kontrollieren können. Allerdings ist es ein bisschen wählerisch, wie die Daten in sie eingespeist wird, so müssen wir die Daten für sie neu zu formatieren, bevor wir die Graphen bauen:
# Or if you want to do it in ggplot
filtered <- data.frame(id = sp_mat2[,ncol(sp_mat2)], dist = sp_mat2[[displaylayer]])
ggplot_powiaty$dist == 0
ggplot_powiaty <- powiaty %>% fortify()
ggplot_powiaty <- merge(x = ggplot_powiaty, y = filtered, by = "id")
names(ggplot_powiaty)
und die Handlung. Ich habe es ein wenig angepasst, indem ich nicht benötigte Elemente entfernt und einen Hintergrund hinzugefügt habe.Um die Region in der Mitte der Suche schwarz zu machen, unterteile ich die Daten mit ggplot_powiaty[ggplot_powiaty$dist == 0, ]
und zeichne sie dann als ein anderes Polygon.
ggplot(ggplot_powiaty, aes(x = long, y = lat, group = group, fill = dist)) +
geom_polygon(colour = "black") +
geom_polygon(data =ggplot_powiaty[ggplot_powiaty$dist == 0, ],
fill = "grey60") +
labs(title = "Distance of Counties from Krakow", caption = "Mikey Harper") +
scale_fill_gradient2(low = "#d73027", mid = "#fee08b", high = "#1a9850", midpoint = 10) +
theme(
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
plot.background = element_rect(fill = "#f5f5f2", color = NA),
panel.background = element_rect(fill = "#f5f5f2", color = NA),
legend.background = element_rect(fill = "#f5f5f2", color = NA),
panel.border = element_blank())
für Wrocław zu zeichnen, wie an der Spitze der Post gezeigt, nur displaylayer <- "Ref0264"
ändern und den Titel aktualisieren.
WOW! das ist super Arbeit! Ich werde es analysieren und hoffentlich verstehen! –