Mapping the proportion of people with West Indian ancestry in
Brooklyn, New York.
library(tidyverse)
library(tidycensus)
library(sf)
library(scales)
library(RColorBrewer)
library(plotly)
Methods
Borough boundaries are represented with a shapefile that was
downloaded from NYC Open Data.
Census tract boundaries and data are from the 2016-2020 5-year
American Community Survey, accessed with the tidyverse R package. Census
data includes:
- the number of people with West Indian ancestry
- total population that reports ancestry
The proportion of people with West Indian ancestry for each census
tract was calculated and the census tracts with no residents were
removed.
boros <- st_read("part2/data/raw/geo/BoroughBoundaries.geojson")
raw_ancestry <- get_acs(geography = "tract",
variables = c(ancestry_pop = "B04006_001",
west_indian = "B04006_094"),
state='NY',
county = 'Kings',
geometry = T,
year = 2020,
output = "wide")
west_indian <- raw_ancestry |>
mutate(pct_west_indian = west_indianE/ancestry_popE) |>
filter(ancestry_popE > 0)
Results
west_indian_map <- ggplot() +
geom_sf(data = west_indian,
mapping = aes(fill = pct_west_indian,
text = paste0(NAME, ":",
"<br>Percent West Indian ancestry: ",
percent(pct_west_indian, accuracy=1))),
color = "transparent") +
theme_minimal() +
theme(panel.grid.major = element_line(colour = "transparent"),
axis.text.x = element_blank(),
axis.text.y = element_blank()) +
scale_fill_distiller(breaks=c(0, .2, .4, .6, .8, 1),
direction = 1,
na.value = "#fafafa",
# na.value = "transparent",
name="Percent West Indian Ancestry (%)",
labels=percent_format(accuracy = 1L)) +
labs(
title = "Brooklyn, West Indian Ancestry by Census Tract",
caption = "Source: American Community Survey, 2016-20"
) +
geom_sf(data = boros |> filter(boro_name == "Brooklyn"),
color = "black", fill = NA, lwd = .5)
ggplotly(west_indian_map, tooltip = "text") |>
layout(paper_bgcolor = "transparent") |>
config(displayModeBar = FALSE)
As you can see from the map above …. (insert your observations)
LS0tCnRpdGxlOiAiV2VzdCBJbmRpYW4gQW5jZXN0cnkgaW4gQnJvb2tseW4iCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKTWFwcGluZyB0aGUgcHJvcG9ydGlvbiBvZiBwZW9wbGUgd2l0aCBXZXN0IEluZGlhbiBhbmNlc3RyeSBpbiBCcm9va2x5biwgTmV3IFlvcmsuCgoKYGBge3IsIG1lc3NhZ2UgPSBGQUxTRSwgcmVzdWx0cz0naGlkZSd9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHRpZHljZW5zdXMpCmxpYnJhcnkoc2YpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShwbG90bHkpCmBgYAoKCgojIyMgTWV0aG9kcwoKQm9yb3VnaCBib3VuZGFyaWVzIGFyZSByZXByZXNlbnRlZCB3aXRoIGEgc2hhcGVmaWxlIHRoYXQgd2FzIGRvd25sb2FkZWQgZnJvbSBOWUMgT3BlbiBEYXRhLgoKQ2Vuc3VzIHRyYWN0IGJvdW5kYXJpZXMgYW5kIGRhdGEgYXJlIGZyb20gdGhlIDIwMTYtMjAyMCA1LXllYXIgQW1lcmljYW4gQ29tbXVuaXR5IFN1cnZleSwgYWNjZXNzZWQgd2l0aCB0aGUgdGlkeXZlcnNlIFIgcGFja2FnZS4gIENlbnN1cyBkYXRhIGluY2x1ZGVzOgoKKiB0aGUgbnVtYmVyIG9mIHBlb3BsZSB3aXRoIFdlc3QgSW5kaWFuIGFuY2VzdHJ5CiogdG90YWwgcG9wdWxhdGlvbiB0aGF0IHJlcG9ydHMgYW5jZXN0cnkKClRoZSBwcm9wb3J0aW9uIG9mIHBlb3BsZSB3aXRoIFdlc3QgSW5kaWFuIGFuY2VzdHJ5IGZvciBlYWNoIGNlbnN1cyB0cmFjdCB3YXMgY2FsY3VsYXRlZCBhbmQgdGhlIGNlbnN1cyB0cmFjdHMgd2l0aCBubyByZXNpZGVudHMgd2VyZSByZW1vdmVkLgoKYGBge3IsIG1lc3NhZ2UgPSBGQUxTRSwgcmVzdWx0cz0naGlkZSd9Cgpib3JvcyA8LSBzdF9yZWFkKCJwYXJ0Mi9kYXRhL3Jhdy9nZW8vQm9yb3VnaEJvdW5kYXJpZXMuZ2VvanNvbiIpCgpyYXdfYW5jZXN0cnkgPC0gZ2V0X2FjcyhnZW9ncmFwaHkgPSAidHJhY3QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzID0gYyhhbmNlc3RyeV9wb3AgPSAiQjA0MDA2XzAwMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VzdF9pbmRpYW4gPSAiQjA0MDA2XzA5NCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9J05ZJywKICAgICAgICAgICAgICAgICAgICAgICAgY291bnR5ID0gJ0tpbmdzJywKICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBULCAKICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IDIwMjAsCiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICJ3aWRlIikgCgp3ZXN0X2luZGlhbiA8LSByYXdfYW5jZXN0cnkgfD4gCiAgbXV0YXRlKHBjdF93ZXN0X2luZGlhbiA9IHdlc3RfaW5kaWFuRS9hbmNlc3RyeV9wb3BFKSB8PiAKICBmaWx0ZXIoYW5jZXN0cnlfcG9wRSA+IDApCmBgYAoKIyMjIFJlc3VsdHMKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRX0Kd2VzdF9pbmRpYW5fbWFwIDwtIGdncGxvdCgpICArIAogIGdlb21fc2YoZGF0YSA9IHdlc3RfaW5kaWFuLCAKICAgICAgICAgIG1hcHBpbmcgPSBhZXMoZmlsbCA9IHBjdF93ZXN0X2luZGlhbiwKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMChOQU1FLCAiOiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj5QZXJjZW50IFdlc3QgSW5kaWFuIGFuY2VzdHJ5OiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQocGN0X3dlc3RfaW5kaWFuLCBhY2N1cmFjeT0xKSkpLAogICAgICAgICAgY29sb3IgPSAidHJhbnNwYXJlbnQiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJ0cmFuc3BhcmVudCIpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIoYnJlYWtzPWMoMCwgLjIsIC40LCAuNiwgLjgsIDEpLAogICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiI2ZhZmFmYSIsCiAgICAgICAgICAgICAgICAgICAgICAgIyBuYS52YWx1ZSA9ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iUGVyY2VudCBXZXN0IEluZGlhbiBBbmNlc3RyeSAoJSkiLAogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscz1wZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDFMKSkgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJCcm9va2x5biwgV2VzdCBJbmRpYW4gQW5jZXN0cnkgYnkgQ2Vuc3VzIFRyYWN0IiwKICAgIGNhcHRpb24gPSAiU291cmNlOiBBbWVyaWNhbiBDb21tdW5pdHkgU3VydmV5LCAyMDE2LTIwIgogICkgKyAKICBnZW9tX3NmKGRhdGEgPSBib3JvcyB8PiBmaWx0ZXIoYm9yb19uYW1lID09ICJCcm9va2x5biIpLCAKICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9IE5BLCBsd2QgPSAuNSkKCmdncGxvdGx5KHdlc3RfaW5kaWFuX21hcCwgdG9vbHRpcCA9ICJ0ZXh0IikgfD4KICBsYXlvdXQocGFwZXJfYmdjb2xvciA9ICJ0cmFuc3BhcmVudCIpIHw+CiAgY29uZmlnKGRpc3BsYXlNb2RlQmFyID0gRkFMU0UpCgoKYGBgCgpBcyB5b3UgY2FuIHNlZSBmcm9tIHRoZSBtYXAgYWJvdmUgLi4uLiAoaW5zZXJ0IHlvdXIgb2JzZXJ2YXRpb25zKQoK