Reputation: 2520
can somebody please help me? I am using this source: https://github.com/wmurphyrd/fiftystater
devtools::install_github("wmurphyrd/fiftystater")
library(fiftystater)
library(ggplot2)
data("fifty_states") # this line is optional due to lazy data loading
december <- read.csv("test.Dec.csv", header = TRUE)
head(december)
State Mean.of.median.housing X X.1 X.2 X.3 X.4 X.5
1 Alabama 128604.11 NA NA NA NA NA NA
2 Alaska NA NA NA NA NA NA NA
3 Arizona 199831.35 NA NA NA NA NA NA
4 Arkansas 107573.94 NA NA NA NA NA NA
5 California 443727.60 NA NA NA NA NA NA
6 Colorado 238422.24 NA NA NA NA NA NA
7 Connecticut 286932.25 NA NA NA NA NA NA
8 Delaware 176772.28 NA NA NA NA NA NA
9 Florida 201340.36 NA NA NA NA NA NA
10 Georgia 151471.39 NA NA NA NA NA NA
11 Hawaii 462844.24 NA NA NA NA NA NA
12 Idaho 151015.16 NA NA NA NA NA NA
13 Illinois 212096.73 NA NA NA NA NA NA
14 Indiana 100004.84 NA NA NA NA NA NA
15 Iowa 145490.91 NA NA NA NA NA NA
16 Kansas 130308.77 NA NA NA NA NA NA
17 Kentucky 135243.13 NA NA NA NA NA NA
18 Louisiana 119259.02 NA NA NA NA NA NA
19 Maine NA NA NA NA NA NA NA
20 Maryland 266604.41 NA NA NA NA NA NA
21 Massachusetts 316337.88 NA NA NA NA NA NA
22 Michigan 152591.44 NA NA NA NA NA NA
23 Minnesota 219975.79 NA NA NA NA NA NA
24 Mississippi 90238.10 NA NA NA NA NA NA
25 Missouri 162622.49 NA NA NA NA NA NA
26 Montana NA NA NA NA NA NA NA
27 Nebraska 129369.15 NA NA NA NA NA NA
28 Nevada 217827.56 NA NA NA NA NA NA
29 New Hampshire 207974.68 NA NA NA NA NA NA
30 New Jersey 311639.37 NA NA NA NA NA NA
31 New Mexico 181346.86 NA NA NA NA NA NA
32 New York 224106.12 NA NA NA NA NA NA
33 North Carolina 163972.77 NA NA NA NA NA NA
34 North Dakota NA NA NA NA NA NA NA
35 Ohio 121977.38 NA NA NA NA NA NA
36 Oklahoma 110820.16 NA NA NA NA NA NA
37 Oregon 209567.20 NA NA NA NA NA NA
38 Pennsylvania 163647.28 NA NA NA NA NA NA
39 Rhode Island 230743.79 NA NA NA NA NA NA
40 South Carolina 127012.49 NA NA NA NA NA NA
41 South Dakota NA NA NA NA NA NA NA
42 Tennessee 111790.22 NA NA NA NA NA NA
43 Texas 123364.33 NA NA NA NA NA NA
44 Utah 207881.14 NA NA NA NA NA NA
45 Vermont NA NA NA NA NA NA NA
46 Virginia 271363.23 NA NA NA NA NA NA
47 Washignton 256817.77 NA NA NA NA NA NA
48 West Virginia 82052.38 NA NA NA NA NA NA
49 Wisconsin 138538.92 NA NA NA NA NA NA
50 Wyoming NA NA NA NA NA NA NA
51 NA NA NA NA NA NA NA
52 NA NA NA NA NA NA NA
december <- december[-(51:52), -(3:9)]
State Mean.of.median.housing
1 Alabama 128604.11
2 Alaska NA
3 Arizona 199831.35
# map_id creates the aesthetic mapping to the state name column in your data
p <- ggplot(december, aes(map_id = december$State)) +
# map points to the fifty_states shape data
geom_map(aes(fill = december$Mean.of.median.housing), map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_continuous(breaks = NULL) +
scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "bottom",
panel.background = element_blank())
p
How can I fix it? I tried many options, but failed. Also appreciate if somebody share a good source how to do US maps by state.
Sincerely Oleksiy
Upvotes: 0
Views: 13809
Reputation: 2019
Without your exact data, it's hard to tell where the problem is. However, I've managed to replicate the error with an adapted extract of the data you provided in your comment. The error disappears when a lowercase version of the state name is used. I also checked all the variables were the same length using sapply(december, length)
.
First, the adapted data:
december <- structure(list(state = structure(1:7, .Label = c("Alabama", "Alaska", "Arizona", "Arkansas", "California", "New Jersey", "Wyoming"), class = "factor"), housing = c(128604.1126, 199831.3511, 107573.9375, 443727.5987, 238422.2379, 286932.2548, NA)), .Names = c("state", "housing"), row.names = c(NA, 7L), class = "data.frame")
This version of the code gives the error:
p <- ggplot(december, aes(map_id = state)) +
geom_map(aes(fill = housing), map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_continuous(breaks = NULL) +
scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "bottom",
panel.background = element_blank())
p
Error in seq_len(nrow(data) - 1) : argument must be coercible to non-negative integer
But using a lowercase version of the state
variable seems to solve it:
december$statelower <- tolower(december$state)
p <- ggplot(december, aes(map_id = statelower)) +
geom_map(aes(fill = housing), map = fifty_states) +
expand_limits(x = fifty_states$long, y = fifty_states$lat) +
coord_map() +
scale_x_continuous(breaks = NULL) +
scale_y_continuous(breaks = NULL) +
labs(x = "", y = "") +
theme(legend.position = "bottom",
panel.background = element_blank())
p
The map below is produced from the code above.
Upvotes: 2