Anakin Skywalker
Anakin Skywalker

Reputation: 2520

Error in seq_len(nrow(data) - 1) : argument must be coercible to non-negative integer in ggplot2 map

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

Error in seq_len(nrow(data) - 1) : argument must be coercible to non-negative integer

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

Answers (1)

meenaparam
meenaparam

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. housing_fifty_states_map

Upvotes: 2

Related Questions