So, I have a data frame in R called obesity_map, which basically gives me the state, county, and county obesity rate. It looks something like this:
obesity_map = data.frame(state, county, obesity_rate)
I am trying to visualize this on a map showing various rates of county obesity across the US:
us.state.map <- map_data('state') head(us.state.map) states <- levels(as.factor(us.state.map$region)) df <- data.frame(region = states, value = runif(length(states), min=0, max=100),stringsAsFactors = FALSE) map.data <- merge(us.state.map, df, by='region', all=T) map.data <- map.data[order(map.data$order),] head(map.data) map.county <- map_data('county') county.obesity <- data.frame(region = obesity_map$state, subregion = obesity_map$county, value = obesity_map$obesity_rate) map.county <- merge(county.obesity, map.county, all=TRUE) ggplot(map.county, aes(x = long, y = lat, group=group, fill=as.factor(value))) + geom_polygon(colour = "white", size = 0.1)
And this basically creates an image that looks like this:

As you can see, the USA is divided into strange shapes, the colors are not one consistent color in different gradients, and you cannot make much of it. But what I really want is something like this below, but with every county filled:

I am new to this, so I will be grateful for any help!
Edit:
Here is the output of dput:
dput(obesity_map)
Structure
(list (X = 1: 3141, FIPS = c (1L, 3L, 5L, 7L, 9L, 11L, 13L, 15L, 17L, 19L, 21L, 23L, 25L, 27L, 29L, 31L, 33L, 35L, 37L , 39L, 41L, 43L, 45L, 47L, 49L, 51L, 53L, 55L, 57L, 59L, 61L, 63L, 65L, 67L, 69L, 71L, 73L, 75L, 77L, 79L, 81L, 83L, 85L, 87L , 89L, 91L, 93L, 95L, 97L, 99L, 101L, 103L, 105L, 107L, 109L, 111L, 113L, 115L, 117L, 119L, 121L, 123L, 125L, 127L, 129L, 131L, 133L, 13L, 16L , 20L, 50L, 60L, 68L, 70L, 90L, 100L, 110L, 122L, 130L, 150L, 164L, 170L, 180L, 185L, 188L, 201L, 220L, 232L, 240L, 261L, 270L, 280L, 282L , 290L, 1L, 3L, 5L, 7L, 9L, 11L, 12L, 13L, 15L, 17L, 19L, 21L, 23L, 25L, 27L, 1L, 3L, 5L, 7L, 9L, 11L, 13L, 15L, 17L , 19L, 21L, 23L, 25L, 27L, 29L, 31L, 33L, 35L, 37L, 39L, 41L,
This is a huge number of numbers, because it is for each American district, so I reduced the results and put the first lines of the line.
Basically, a data frame looks like this:
print(head(obesity_map)) X FIPS state_names county_names obesity 1 1 1 Alabama Autauga 24.5 2 2 3 Alabama Baldwin 23.6 3 3 5 Alabama Barbour 25.6 4 4 7 Alabama Bibb 0.0 5 5 9 Alabama Blount 24.2 6 6 11 Alabama Bullock 0.0
I also tried using ggcounty following the example, but I keep getting the error. I'm not quite sure what I did wrong:
library(ggcounty) # breaks obesity_map$obese <- cut(obesity_map$obesity, breaks=c(0, 5, 10, 15, 20, 25, 30), labels=c("1", "2", "3", "4", "5", "6"), include.lowest=TRUE) # get the US counties map (lower 48) us <- ggcounty.us() # start the plot with our base map gg <- us$g # add a new geom with our population (choropleth) gg <- gg + geom_map(data=obesity_map, map=us$map, aes(map_id=FIPS, fill=obesity_map$obese), color="white", size=0.125)
But I always get the error message: "Error: argument must be forced on a non-negative integer"
Any idea? Thanks again for your help! I appreciate it very much.