Die Spalte state
ist in der Rückkehr von map_data
nicht vorhanden. Dort heißt die Spalte, nach der Sie suchen, region
. Außerdem werden, zumindest in Ihrem Beispiel, keine Daten aus den Daten datatest
geplottet. Also, Sie können es weglassen.
Dieser Code sollte funktionieren. Beachten Sie, dass ich scales = "free"
hinzugefügt habe, da ich davon ausgehe, dass jeder Staat seine entsprechende Facette füllen soll.
ggplot(map_data('state',region=states)
, aes(x=long,y=lat,group=group)) +
geom_polygon(colour='black',fill='white') +
facet_wrap(~region
, scales = "free"
, ncol=3)
Gibt
Beachten Sie, dass die Seitenverhältnisse aus mit facet_wrap
sein werden, da die Facetten der coord_map
Kontrollen nicht umgehen kann. Um die Handlung besser zu machen, würde ich vorschlagen, jede Zustandskarte separat zu machen und dann plot_grid
von cowplot
zu verwenden, um sie zusammenzunähen. Beachten Sie, dass cowplot
lädt ein Standard Thema, so dass Sie wollen, werden entweder auf dem Standard zurückgesetzt (mit theme_set
) oder explizit ein Thema für die Plots setzen (wie ich hier zu tun):
sepStates <-
lapply(states, function(thisState){
ggplot(map_data('state',region=thisState)
, aes(x=long,y=lat,group=group)) +
geom_polygon(colour='black',fill='white') +
facet_wrap(~region) +
coord_map() +
theme_void()
})
library(cowplot)
plot_grid(plotlist = sepStates)
gibt
Wenn Wenn Sie Daten aus einer anderen Quelle einbeziehen möchten, müssen Sie sicherstellen, dass sie kompatibel ist. Insbesondere müssen Sie sicherstellen, dass die Spalte, die Sie facettieren möchten, in beiden Fällen dasselbe heißt.
wir uns vor, Sie die folgenden Daten, die Sie auf dem Grundstück hinzufügen möchten:
datatest <-
structure(list(zip = c("85246", "85118", "85340", "34958", "33022",
"32716", "49815", "48069", "48551", "58076", "58213", "58524",
"73185", "74073", "73148", "98668", "98271", "98290"), city = c("Chandler",
"Gold Canyon", "Litchfield Park", "Jensen Beach", "Hollywood",
"Altamonte Springs", "Channing", "Pleasant Ridge", "Flint", "Wahpeton",
"Ardoch", "Braddock", "Oklahoma City", "Sperry", "Oklahoma City",
"Vancouver", "Marysville", "Snohomish"), state = c("AZ", "AZ",
"AZ", "FL", "FL", "FL", "MI", "MI", "MI", "ND", "ND", "ND", "OK",
"OK", "OK", "WA", "WA", "WA"), latitude = c(33.276539, 33.34,
33.50835, 27.242402, 26.013368, 28.744752, 46.186913, 42.472235,
42.978995, 46.271839, 48.204374, 46.596608, 35.551409, 36.306323,
35.551409, 45.801586, 48.093129, 47.930902), longitude = c(-112.18717,
-111.42, -112.40523, -80.224613, -80.144217, -81.22328, -88.04546,
-83.14051, -83.713124, -96.608142, -97.30774, -100.09497, -97.407537,
-96.02081, -97.407537, -122.520347, -122.21614, -122.03976)), .Names = c("zip",
"city", "state", "latitude", "longitude"), row.names = c(NA,
-18L), class = c("tbl_df", "tbl", "data.frame"))
, die wie folgt aussieht:
zip city state latitude longitude
<chr> <chr> <chr> <dbl> <dbl>
1 85246 Chandler AZ 33.27654 -112.18717
2 85118 Gold Canyon AZ 33.34000 -111.42000
3 85340 Litchfield Park AZ 33.50835 -112.40523
4 34958 Jensen Beach FL 27.24240 -80.22461
5 33022 Hollywood FL 26.01337 -80.14422
6 32716 Altamonte Springs FL 28.74475 -81.22328
7 49815 Channing MI 46.18691 -88.04546
8 48069 Pleasant Ridge MI 42.47223 -83.14051
9 48551 Flint MI 42.97899 -83.71312
10 58076 Wahpeton ND 46.27184 -96.60814
11 58213 Ardoch ND 48.20437 -97.30774
12 58524 Braddock ND 46.59661 -100.09497
13 73185 Oklahoma City OK 35.55141 -97.40754
14 74073 Sperry OK 36.30632 -96.02081
15 73148 Oklahoma City OK 35.55141 -97.40754
16 98668 Vancouver WA 45.80159 -122.52035
17 98271 Marysville WA 48.09313 -122.21614
18 98290 Snohomish WA 47.93090 -122.03976
Wenn Sie auf den Staat Facette wollen, müssen Sie Um es in das gleiche Format (dh, voller Name und Kleinbuchstaben) wie in den Kartendaten zu machen und rufen Sie die Spalte die gleiche Sache (region
anstelle des Staates). Außerdem ist es am einfachsten, wenn Sie die Spaltennamen auch gleich machen.Hier habe ich Spalten am Hinzufügen der drei übereinstimmen, die von der map_data
und das Hinzufügen einer region
Säule aufgetragen werden, die die Facettierung ermöglichen:
stateList <-
setNames(tolower(state.name), state.abb)
datatest$lat <- datatest$latitude
datatest$long <- datatest$longitude
datatest$group <- NA
datatest$region <- stateList[datatest$state]
Jetzt können Sie eine geom_point()
Linie auf dem Grundstück hinzuzufügen, und es wird richtig Facette:
ggplot(map_data('state',region=states)
, aes(x=long,y=lat,group=group)) +
geom_polygon(colour='black',fill='white') +
geom_point(data = datatest) +
facet_wrap(~region
, scales = "free"
, ncol=3)
Gibt
Oder Sie können es zum cowplot
Ansatz hinzufügen (beachten Sie, dass ich gerade title jetzt und überspringen die Facettierung).
sepStates <-
lapply(states, function(thisState){
ggplot(map_data('state',region=thisState)
, aes(x=long,y=lat,group=group)) +
geom_polygon(colour='black',fill='white') +
geom_point(data = datatest[datatest$region == tolower(thisState), ]) +
ggtitle(thisState) +
coord_map() +
theme_void() +
theme(plot.title = element_text(hjust = 0.5))
})
plot_grid(plotlist = sepStates)
gibt
Ihr Code nicht reproduzierbar ist, da 'datatest' fehlt. Bitte geben Sie einige Testdaten an. –
Überprüfen Sie, ob das Datatest $ state eine Faktorvariable ist, andernfalls geben Sie es in eine Faktorvariable um und sehen Sie, ob es funktioniert. –