[Stata] How to create the bivariate map: bimap package
In the previous post, we learned how easy it is to map a map of the United States using maptile
. In this post, I will introduce how to draw a bivariate map using the bimap
command, which was recently (September 2022) developed by Dr. Asjad Naqvi. This package translates multiple lines of codes using geo2xy
package into simple code (like maptile
did, which translates multiple lines of codes using spmap
command into simple code). Here is the example map produced by using bimap
package.
The how-to-guide for bimap is quite well-explained in the Github repository, bimap v1.51 (Github), so you can refer to it. Here is my summary of doing it with ACS variables (using getcensus
package).
Step 1: Install the package
ssc install bimap, replace
// install the packages to run the command
ssc install spmap, replace
ssc install palettes, replace
ssc install colrspace, replace
ssc install schemepack, replace
Step 2: Prepare the dataset that you would love to create the bivariate maps
Before we start, it is recommended to set up the scheme with a white background.
set scheme white_tableau
Then, please prepare the dataset with fips codes (state, county, or any other geographic unit of your interest).
Step 3: Prepare the base map
Then, you need to prepare the base map. You can download the cleaned dta
file for the base map of the US county and state in Dr. Naqvi’s repository: https://github.com/asjadnaqvi/stata-bimap/tree/main/GIS. Please download the files for the geographic unit you are interested in and then put them in the same working directory you are working on.
For other maps, you could create your one using clipgeo
or shp2dta
package.
Step 4: Merge your dataset with base map
The next step is to merge your dataset with the base maps.
use usa_state, clear
destring _all, replace
rename STATEFP statefips // make the variable name same for both your dataset and base map
merge 1:1 statefips using "ACS bimapping.dta" // put the dataset you want to draw the bimap
keep if _m==3
drop _m
Step 5: Draw the bivariate maps
Now you are ready to create the bimap! Here are some options available:
cut
: cut(pctile) for terciles, cut(equal) for equal intervals, or cut(custom) for custom cut-offs.- cut(custom) is specified, then either cutx(), or cuty(), or both need to be defined.
palette
: pinkgreen, bluered, greenblue, purpleyellow, yellowblue, orangeblue, brew1, brew2, brew3, census, rgb, viridis, gscale. You can see the example in the Github of the developer.note
: you can put the note if you have onetexty
andtextx
: you can put the customized name of x and y variables.texts
andtextlabs
: You can change the size of the text for the variable name (texts) and label (textlabs).values
: If you put this option, the map will display the cut-off values on the legend axes.count
orpercent
: the map will display either the count or percent of categories in each box in the map legend.ocolor
: Outline color of polygons with data.osize
: Line width of polygons.
Here is the sample code and map 🙂 I have downloaded the old-age dependency rate and child dependency rate from 2021 ACS (see this post if you are interested in downloading ACS using Stata).
bimap polddepnd pchilddepnd using usa_state_shp_clean, cut(pctile) palette(orangeblue) ///
note("Data from ACS 2017-2021 5-year estimates") ///
texty("Old age dependency rate") textx("Child dependency rate") texts(2.5) textlabs(3) values count ///
ocolor() osize(0.2) ///
polygon(data("usa_state_shp_clean") ocolor(black) osize(0.2))