Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hrbrmstr/ggcounty
:globe_with_meridians: Generate ggplot2 geom_map county maps
https://github.com/hrbrmstr/ggcounty
Last synced: 2 months ago
JSON representation
:globe_with_meridians: Generate ggplot2 geom_map county maps
- Host: GitHub
- URL: https://github.com/hrbrmstr/ggcounty
- Owner: hrbrmstr
- Created: 2014-04-17T00:50:00.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2017-12-09T04:12:18.000Z (about 7 years ago)
- Last Synced: 2024-10-12T21:24:15.646Z (3 months ago)
- Language: R
- Homepage:
- Size: 2.67 MB
- Stars: 63
- Watchers: 6
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
ggcounty
========Generate `ggplot2` `geom_map` United States county maps
This is a simple package with two purposes:
- make it easier to generate US County maps (willing to do others if pointed to good shapefiles) with ggplot2 & geom_map
- use more up-to-date shapefiles than what's in the `maps` package (I mean, it *still* uses "USSR" for Russia :-)As some folks have pointed out (and, one main reason I issued the request-for-comments at such an early stage) is that I wanted to gauge the desire for a more `geom`-oriented/generic way to do county-level mapping than the `#spiffy` [choroplethr](http://cran.r-project.org/web/packages/choroplethr/index.html) package.
After installation, just do:
library(devtools)
install_github("hrbrmstr/ggcounty")
library(ggcounty)maine <- ggcounty("Maine")
maine$gg
To get:![map](https://rawgit.com/hrbrmstr/ggcounty/master/maine.svg)
The `maine` object in the above code contains
- the `gg` ggplot2 object
- a `map` object which is a "fortified" data frame
- a `county.names` object which is a list of all county names (or FIPS codes) in that county
- a `geom_map` object (`geom`) for the state county mapHere is an example of the structure (truncated for brevity):
> str(maine)
List of 4
$ map :'data.frame': 724 obs. of 7 variables:
..$ long : num [1:724] -70 -70 -70 -70 -70 ...
..$ lat : num [1:724] 44.1 44.1 44 44 44 ...
..$ order: int [1:724] 1 2 3 4 5 6 7 8 9 10 ...
..$ hole : logi [1:724] FALSE FALSE FALSE FALSE FALSE FALSE ...
..$ piece: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
..$ group: Factor w/ 18 levels "Androscoggin.1",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ id : chr [1:724] "Androscoggin" "Androscoggin" "Androscoggin" "Androscoggin" ...
$ county.names: chr [1:16] "Androscoggin" "Aroostook" "Cumberland" "Franklin" ...
$ gg :List of 9
..$ data : list()
.. ..- attr(*, "class")= chr "waiver"
..$ layers :List of 1
.. ..$ :Classes 'proto', 'environment'
..$ scales :Reference class 'Scales' [package "ggplot2"] with 1 fields
.. ..$ scales: list()
.. ..and 21 methods, of which 9 are possibly relevant:
.. .. add, clone, find, get_scales, has_scale, initialize, input, n, non_position_scales
..$ mapping : list()
..$ theme :List of 7
.. ..$ plot.background :List of 4
.. .. ..$ fill : chr "transparent"
.. .. ..$ colour : logi NA
.. .. ..$ size : NULL
.. .. ..$ linetype: NULL
.. .. ..- attr(*, "class")= chr [1:2] "element_rect" "element"
.. ..$ panel.border : list()
.. .. ..- attr(*, "class")= chr [1:2] "element_blank" "element"
.. ..$ panel.background:List of 4
.. .. ..$ fill : chr "transparent"
.. .. ..$ colour : logi NA
.. .. ..$ size : NULL
.. .. ..$ linetype: NULL
.. .. ..- attr(*, "class")= chr [1:2] "element_rect" "element"
.. ..$ panel.grid : list()
.. .. ..- attr(*, "class")= chr [1:2] "element_blank" "element"
.. ..$ axis.text : list()
.. .. ..- attr(*, "class")= chr [1:2] "element_blank" "element"
.. ..$ axis.ticks : list()
.. .. ..- attr(*, "class")= chr [1:2] "element_blank" "element"
.. ..$ legend.position : chr "right"
.. ..- attr(*, "class")= chr [1:2] "theme" "gg"
.. ..- attr(*, "complete")= logi FALSE
..$ coordinates:List of 4
.. ..$ projection : chr "mercator"
.. ..$ orientation: NULL
.. ..$ limits :List of 2
.. .. ..$ x: NULL
.. .. ..$ y: NULL
.. ..$ params : list()
.. ..- attr(*, "class")= chr [1:2] "map" "coord"
..$ facet :List of 1
.. ..$ shrink: logi TRUE
.. ..- attr(*, "class")= chr [1:2] "null" "facet"
..$ plot_env :
..$ labels :List of 3
.. ..$ x : chr ""
.. ..$ y : chr ""
.. ..$ map_id: chr "id"
..- attr(*, "class")= chr [1:2] "gg" "ggplot"
$ geom :Classes 'proto', 'environment'
This lets you add further map layers (e.g. for a choropleth):library(ggcounty)
# built-in US population by FIPS code data set
data(population)
# define appropriate (& nicely labeled) population breaks
population$brk <- cut(population$count,
breaks=c(0, 100, 1000, 10000, 100000, 1000000, 10000000),
labels=c("0-99", "100-1K", "1K-10K", "10K-100K",
"100K-1M", "1M-10M"),
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=population, map=us$map,
aes(map_id=FIPS, fill=brk),
color="white", size=0.125)
# define nice colors
gg <- gg + scale_fill_manual(values=c("#ffffcc", "#c7e9b4", "#7fcdbb",
"#41b6c4", "#2c7fb8", "#253494"),
name="Population")
# plot the map
gg![map2](https://rawgit.com/hrbrmstr/ggcounty/master/mainechoro.png)
And, combining individual maps is pretty straightforward:
ny <- ggcounty("New York", fill="#c7e9b4", color="white")
nj <- ggcounty("New Jersey", fill="#41b6c4", color="white")
pa <- ggcounty("Pennsylvania", fill="#253494", color="white")ny$gg + nj$geom + pa$geom
![map2](https://rawgit.com/hrbrmstr/ggcounty/master/tristate.png)
or have the county names/FIPS codes as a quick reference or for verifitcation.
> ny$county.names
[1] "Albany" "Allegany" "Bronx" "Broome" "Cattaraugus" "Cayuga"
[7] "Chautauqua" "Chemung" "Chenango" "Clinton" "Columbia" "Cortland"
[13] "Delaware" "Dutchess" "Erie" "Essex" "Franklin" "Fulton"
[19] "Genesee" "Greene" "Hamilton" "Herkimer" "Jefferson" "Kings"
[25] "Lewis" "Livingston" "Madison" "Monroe" "Montgomery" "Nassau"
[31] "New York" "Niagara" "Oneida" "Onondaga" "Ontario" "Orange"
[37] "Orleans" "Oswego" "Otsego" "Putnam" "Queens" "Rensselaer"
[43] "Richmond" "Rockland" "Saratoga" "Schenectady" "Schoharie" "Schuyler"
[49] "Seneca" "St. Lawrence" "Steuben" "Suffolk" "Sullivan" "Tioga"
[55] "Tompkins" "Ulster" "Warren" "Washington" "Wayne" "Westchester"
[61] "Wyoming" "Yates"