Dank der Antwort in dieser Frage konnte ich eine Karte der Wahlabteilungen in einem Teil des Vereinigten Königreichs, in diesem Fall in Pembrokeshire, unterteilen und zeichnen. Der resultierende Datenrahmen ist groß und enthält Ordnance Survey-Daten, sodass es schwierig wäre, hier zu posten, aber der Datenrahmen sieht folgendermaßen aus:
> str(bar)
'data.frame': 134609 obs. of 7 variables:
$ long : num 214206 214203 214202 214198 214187 ...
$ lat : num 207320 207333 207339 207347 207357 ...
$ order: int 1 2 3 4 5 6 7 8 9 10 ...
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ piece: Factor w/ 12 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
$ group: Factor w/ 82 levels "Amroth ED.1",..: 1 1 1 1 1 1 1 1 1 1 ...
$ id : chr "Amroth ED" "Amroth ED" "Amroth ED" "Amroth ED" ...
Ich habe den resultierenden Datenrahmen ggplot
mit dem folgenden Code gespeist :
ggplot(bar, aes(x = long, y = lat, group = group)) +
geom_polygon(colour = "black", fill = "grey50")
Dies erzeugt das folgende Bild, das schön und sauber aussieht.
Dann habe ich dies mit einem Datenrahmen kombiniert, der Bevölkerungsdaten enthält, die folgendermaßen aussehen:
> str(mydf)
'data.frame': 60 obs. of 22 variables:
$ ward.code : chr "00NSPH" "00NSPJ" "00NSPK" "00NSPL" ...
$ id : chr "Amroth ED" "Burton ED" "Camrose ED" "Carew ED" ...
$ la : chr "Pembrokeshire" "Pembrokeshire" "Pembrokeshire" "Pembrokeshire" ...
$ total : num 1237 1737 2458 1570 1976 ...
$ age.0.4 : num 34 86 81 92 107 76 131 77 90 95 ...
$ age.5.9 : num 45 93 83 80 138 82 111 85 132 75 ...
$ age.10.14 : num 65 116 123 103 111 79 151 80 135 83 ...
$ age.15.19 : num 69 90 161 126 117 93 150 87 139 103 ...
$ age.20.24 : num 42 63 116 58 81 63 120 58 114 79 ...
$ age.25.29 : num 46 63 73 60 86 56 90 51 108 67 ...
$ age.30.34 : num 38 60 87 72 99 54 115 62 76 42 ...
$ age.35.39 : num 53 105 104 82 110 81 91 76 121 82 ...
$ age.40.44 : num 70 142 128 107 116 88 161 89 151 92 ...
$ age.45.49 : num 71 138 172 122 128 109 192 116 190 104 ...
$ age.50.54 : num 93 136 204 108 133 119 168 125 174 99 ...
$ age.55.59 : num 126 129 235 125 149 108 179 137 175 106 ...
$ age.60.64 : num 139 162 248 170 194 129 236 183 199 136 ...
$ age.65.69 : num 110 110 205 95 129 143 172 128 167 130 ...
$ age.70.74 : num 81 85 174 52 100 75 110 88 113 128 ...
$ age.75.79 : num 78 54 130 58 74 70 72 68 119 114 ...
$ age.80.84 : num 38 50 84 33 56 43 63 42 94 62 ...
$ age.85.plus: num 39 55 50 27 48 42 36 55 85 84 ...
... mit folgendem Code:
foo <- merge(mydf, bar)
und zeichnete das Ergebnis folgendermaßen auf:
ggplot(foo, aes(x = long, y = lat, group = group)) +
geom_polygon(colour = "black", fill = "grey50")
Das Problem ist, dass das resultierende Diagramm Artefakte aufweist, wie im folgenden Bild gezeigt:
Die ursprüngliche Datenrahmen-Teilmenge aus dem Shapefile ist also in Ordnung, aber die zusammengeführte Datendatei weist Probleme auf.
Frage: Was könnte die Ursache für diese Art von Artefakt sein? Ich verstehe, dass dies ohne den vollständigen Code und die Daten eine Vermutung ist, und ich entschuldige mich im Voraus dafür, aber das Objekt ist sehr groß und es kann auch zu Umverteilungsproblemen kommen. Alle Hinweise, Hinweise und Vorschläge, wo Sie anfangen sollen, sind willkommen.
Antworten:
Ich habe verspätet erkannt, dass der
sort
Teil desmerge
Anrufs schuld ist. Wenn ich benutze:Die Polygone werden zumindest in diesem speziellen Fall korrekt dargestellt. Vielen Dank an alle für ihre Beiträge.
quelle
Vergleichen Sie die Lang-, Lat-, Stück- und Lochsäulen von foo mit denen von bar. Die Zusammenführung hat diese Informationen irgendwie verloren.
Der Grund für das Durcheinander ist normalerweise, dass die Polygone aus mehr als einem Stück bestehen und der Algorithmus jedes Stück als separate Ringe zeichnet. Wenn die 'Stück'-Information fehlt, wird nur das ganze Los auf einmal gezogen. Dies zeigt sich, wenn entweder echte Inseln oder winzige Digitalisierungsfehler vorliegen.
Ich denke, Bar hat eine Reihe pro Ring, aber ich denke, die Fusion hat eine Reihe pro Wahlabteilung hervorgebracht. Führen Sie die Zusammenführung auf Shapefile-Ebene durch und verstärken Sie sie dann.
quelle
shape
in Ihrem vorherigen Q zurückgerufen wurde, können Sie diesshape
(meistens) als Datenrahmen behandeln . Fügen Sie die Spalte diesem Datenrahmen hinzu. Ich bin nicht sicher, ob das Zusammenführen funktioniert. Holen Sie es einfach in der richtigen Reihenfolge und fügen Sie es als neue Spalten hinzu (cbind
?). Dann befestigen und planen. In der Tat können Sie nur verwendenspplot(shape,"foo")
und Sie brauchen dann kein ggplot.dplyr
's left_join behält alle Zeilen auf der linken Seite (a) bei und verbindet b, wobei alle Spalten von b hinzugefügt werden. Auf diese Weise wird keine der Informationen aus dem Datenrahmen, die die Informationen zu den Polygonen enthalten, geändert. Das könnte dieses Problem lösen.Der Befehl wäre:
quelle
Das Ausführen von foo <-foo [order (foo $ order)] direkt nach dem Zusammenführen hat bei mir funktioniert ... Zusammenführen kann die Bestellung durcheinander bringen.
quelle