Ich habe einige demographische Daten, die ich verwenden möchte, um eine Choropleth-Karte von US-Grafschaften zu machen. Mein Workflow führt zu keinen Fehlern und ich kann die endgültige Karte erstellen, jedoch die Daten, deren Zuordnung falsch ist. Mein Workflow verwendet zwei Datenquellen - eine Formdatei und ein data.frame. Die Shape-Datei ist ein Grafschaft Shape-Datei, die Sie unter diesem Link zu diesem Link https://www.dropbox.com/s/4ujxidyx42793j7/cb_2015_us_county_500k.zip?dl=1 Die data.frame Datei gefunden werden kann hier gefunden werden kann: https://www.dropbox.com/s/qys6s6ikrs1g2xb/data.dem.csv?dl=1Konnte keine choropleth map in r
Hier ist mein Code:
#Load dependencies
library(sp)
library(spatialEco)
library(rgdal)
library(dplyr)
library(maptools)
library(taRifx.geo)
library(ggplot2)
library(USAboundaries)
library(splitstackshape)
library(maps)
library(cowplot)
#Read in shape and csv files
county.track<-readOGR("/path", "filename")
[email protected]$id = rownames([email protected])
data<-read.csv("/path/filename.csv")
#Convert data.frame (data) to points polygon file
data$y<-data$lat
data$x<-data$long
coordinates(data) <- ~ x + y
proj4string(data) <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
proj4string(county.track) <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
#Overlay points onto polygons
county.track.data<-point.in.poly(data, county.track)
#Summarize point data by county
count<-select(as.data.frame(county.track.data), id, count)
count<-count %>%
group_by(id) %>%
summarize(count=sum(count))
#Merge with shape file data
[email protected]<-merge([email protected], count, by="id", all.x=T)
#Replace NA values with zeroes
[email protected]$count[is.na([email protected]$count)]<-0
county.track.points = fortify(county.track, region="id")
map.plot<-merge(county.track.points, [email protected], by="id")
#Get rid of Hawaii and Alaska
map.plot<-map.plot %>%
filter(lat<50 & lat>25) %>%
filter(long>-130)
#Create choropleth map using ggplot2
ggplot(map.plot) +
geom_polygon(aes(long, lat, group=group, fill=log(count))) +
coord_map()
Die Ausgabe sieht wie folgt aus :
Aber das ist einfach falsch, was aus einer Reihe von Gründen offensichtlich ist. Einer, am offensichtlichsten ist ein Großteil der Daten nicht abgebildet. Die grauen Bereiche auf der Karte bedeuten NA. Aber ich habe die NAs in einem der obigen Schritte entfernt. Auch bei der Untersuchung der Daten, die zum Mapping (map.plot) verwendet wurden, gibt es keine NAs in der Füllvariablen (count). Zweitens ist die Verteilung von Werten für das, was zugeordnet ist, deaktiviert. Los Angeles County sollte den höchsten Zählwert bei 793 haben (logarithmischer Wert von 6,675823), doch auf der Karte zeigen zahlreiche hellere Grafschaften an, dass der Wert anderer räumlicher Einheiten höher ist und einige der topbewerteten Bezirke wie San Diego nicht gefüllt sind überhaupt (unten links auf der Karte).
Wenn ich die Daten untersuche, die ich verwendet habe (map.plot), scheint alles OK zu sein. Los Angeles County ist immer noch die am höchsten bewertete Grafschaft für die "Zählung" Variable, doch die Karte schlägt anders vor (sieh dieses Bild hier). Ich hoffe, jemand kann hier eine Spurensicherung machen und das Problem identifizieren, ich habe mein Bestes getan, um alle meine Schritte durchzugehen, aber ich kann das Problem nicht identifizieren. Danke im Voraus.
UPDATE: Ich habe versucht, ein anderes Shapefile aus der gleichen Quelle zu verwenden. Das Shapefile im obigen Link ist dasselbe wie das mit "cb_2015_us_county_500k.zip" (https://www.census.gov/geo/maps-data/data/cbf/cbf_counties.html). Wenn ich eine andere Shape-Datei (wie cb_2015_us_county_5m.zip) wählen erhalte ich eine andere Karte, aber dieselben Probleme: Siehe die folgenden ein Beispiel Karte:
Ich bin nicht sicher, was los ist! In dieser neuen Karte ist LA County nicht mehr einmal in Orange County gefärbt! Jede Hilfe wird sehr geschätzt.
Vielen Dank für die Antwort, ich habe Probleme Code zu replizieren '' counties_composite()%>% Teilmenge (Zustand % in% unique (df $ state)) -> usa'' Ich bekomme folgenden Fehler: Fehler in Übereinstimmung (x, Tabelle, nomatch = 0L): Objekt 'state' nicht gefunden –
wenn ich dies stattdessen "counties_composite."()%>% Teilmenge (df $ state% in% eindeutig (df $ state)) -> usa'' dann gibt mir diese Zeile einen Fehler: Koordinaten (Punkte) <- ~ lang + lat Fehler in (Funktion (Klassen, fdef, Mtabelle): nicht finden eine geerbte Methode für die Funktion 'Koordinaten <-' für die Signatur '" tbl_df "' –
Es geht mit' 'pts <-as.data.frame (it)' ' –