Problem to be solved
There is a hypothetical situation where I can only move to 5 states
between California, Texas, New York, Florida, and Illinois. The reason
for this move is that these states are closest to financial service
industries, something that is a heuristic for my family since we are all
working in the industry. Another key data point we are considering is
the state’s overall attainment of education, that is, the percentage of
citizens who have attained a bachelor’s degree or higher. This is a
heuristic for proximity and number of potential financial service and
white collar jobs, since most of these jobs do require at least a
bachelor’s degree for qualification. I want to optimize for states that
have a bachelor’s attainment of at least 35 percent.
Dataset
US Census Bureau - Educational attainment
https://data.census.gov/table/ACSST1Y2021.S1501?q=S1501&g=010XX00US$0400000&moe=false&tp=false&tid=ACSST1Y2021.S1501
Principles (Design)
- Good design should be understandable, unobtrusive, and as minimal as
possible. To achieve these goals, I have implemented a bar chart
visualization, whilst using color to note that a heuristic I care about
(> 35 percent bachelor’s degree attainment) should be met. To make it
more perceptible, we utilize color to create an impact right away, and
help the user interpret the states that meet the heuristic.
edu_attainment <- data.frame(
State = c("California", "Texas", "New York", "Florida", "Illinois"),
Bachelor_Percent = c(36.19, 33.12, 40.90, 33.16, 37.14)
)
# color coding
edu_attainment$Color = ifelse(edu_attainment$Bachelor_Percent > 35, "green", "red")
edu_attainment$Color = as.factor(edu_attainment$Color)
# Ordering states by Bachelor_Percent
edu_attainment$State <- factor(edu_attainment$State, levels = edu_attainment$State[order(edu_attainment$Bachelor_Percent, decreasing = TRUE)])
# Plot
library(ggplot2)
ggplot(data = edu_attainment, aes(x = State, y = Bachelor_Percent, fill = Color)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("green" = "green", "red" = "red")) +
theme_minimal() +
labs(title = "College Educational Attainment by State (Ordered)",
x = "State",
y = "Percent of Bachelor Degrees Attained") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
guides(fill=FALSE) # Remove legend for color

geom_hline(yintercept = 35, color = "red", linetype = "dashed", size = 1) # Add red dashed line at 35%
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
Please use `linewidth` instead.
mapping: yintercept = ~yintercept
geom_hline: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
LS0tCnRpdGxlOiAiV2VlayAyIEhvbWV3b3JrIC0gQ2hhaXRhbnlhIFByYXNoYW50IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyMgUHJvYmxlbSB0byBiZSBzb2x2ZWQKClRoZXJlIGlzIGEgaHlwb3RoZXRpY2FsIHNpdHVhdGlvbiB3aGVyZSBJIGNhbiBvbmx5IG1vdmUgdG8gNSBzdGF0ZXMgYmV0d2VlbiBDYWxpZm9ybmlhLCBUZXhhcywgTmV3IFlvcmssIEZsb3JpZGEsIGFuZCBJbGxpbm9pcy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBtb3ZlIGlzIHRoYXQgdGhlc2Ugc3RhdGVzIGFyZSBjbG9zZXN0IHRvIGZpbmFuY2lhbCBzZXJ2aWNlIGluZHVzdHJpZXMsIHNvbWV0aGluZyB0aGF0IGlzIGEgaGV1cmlzdGljIGZvciBteSBmYW1pbHkgc2luY2Ugd2UgYXJlIGFsbCB3b3JraW5nIGluIHRoZSBpbmR1c3RyeS4gQW5vdGhlciBrZXkgZGF0YSBwb2ludCB3ZSBhcmUgY29uc2lkZXJpbmcgaXMgdGhlIHN0YXRlJ3Mgb3ZlcmFsbCBhdHRhaW5tZW50IG9mIGVkdWNhdGlvbiwgdGhhdCBpcywgdGhlIHBlcmNlbnRhZ2Ugb2YgY2l0aXplbnMgd2hvIGhhdmUgYXR0YWluZWQgYSBiYWNoZWxvcidzIGRlZ3JlZSBvciBoaWdoZXIuIFRoaXMgaXMgYSBoZXVyaXN0aWMgZm9yIHByb3hpbWl0eSBhbmQgbnVtYmVyIG9mIHBvdGVudGlhbCBmaW5hbmNpYWwgc2VydmljZSBhbmQgd2hpdGUgY29sbGFyIGpvYnMsIHNpbmNlIG1vc3Qgb2YgdGhlc2Ugam9icyBkbyByZXF1aXJlIGF0IGxlYXN0IGEgYmFjaGVsb3IncyBkZWdyZWUgZm9yIHF1YWxpZmljYXRpb24uIEkgd2FudCB0byBvcHRpbWl6ZSBmb3Igc3RhdGVzIHRoYXQgaGF2ZSBhIGJhY2hlbG9yJ3MgYXR0YWlubWVudCBvZiBhdCBsZWFzdCAzNSBwZXJjZW50LiAKCiMjIyBEYXRhc2V0IAoKYGBgClVTIENlbnN1cyBCdXJlYXUgLSBFZHVjYXRpb25hbCBhdHRhaW5tZW50IApodHRwczovL2RhdGEuY2Vuc3VzLmdvdi90YWJsZS9BQ1NTVDFZMjAyMS5TMTUwMT9xPVMxNTAxJmc9MDEwWFgwMFVTJDA0MDAwMDAmbW9lPWZhbHNlJnRwPWZhbHNlJnRpZD1BQ1NTVDFZMjAyMS5TMTUwMSAKYGBgCgoKIyMjIFByaW5jaXBsZXMgKERlc2lnbikKCi0gR29vZCBkZXNpZ24gc2hvdWxkIGJlIHVuZGVyc3RhbmRhYmxlLCB1bm9idHJ1c2l2ZSwgYW5kIGFzIG1pbmltYWwgYXMgcG9zc2libGUuIFRvIGFjaGlldmUgdGhlc2UgZ29hbHMsIEkgaGF2ZSBpbXBsZW1lbnRlZCBhIGJhciBjaGFydCB2aXN1YWxpemF0aW9uLCB3aGlsc3QgdXNpbmcgY29sb3IgdG8gbm90ZSB0aGF0IGEgaGV1cmlzdGljIEkgY2FyZSBhYm91dCAoPiAzNSBwZXJjZW50IGJhY2hlbG9yJ3MgZGVncmVlIGF0dGFpbm1lbnQpIHNob3VsZCBiZSBtZXQuIFRvIG1ha2UgaXQgbW9yZSBwZXJjZXB0aWJsZSwgd2UgdXRpbGl6ZSBjb2xvciB0byBjcmVhdGUgYW4gaW1wYWN0IHJpZ2h0IGF3YXksIGFuZCBoZWxwIHRoZSB1c2VyIGludGVycHJldCB0aGUgc3RhdGVzIHRoYXQgbWVldCB0aGUgaGV1cmlzdGljLiAKCmBgYHtyfQoKZWR1X2F0dGFpbm1lbnQgPC0gZGF0YS5mcmFtZSgKICBTdGF0ZSA9IGMoIkNhbGlmb3JuaWEiLCAiVGV4YXMiLCAiTmV3IFlvcmsiLCAiRmxvcmlkYSIsICJJbGxpbm9pcyIpLAogIEJhY2hlbG9yX1BlcmNlbnQgPSBjKDM2LjE5LCAzMy4xMiwgNDAuOTAsIDMzLjE2LCAzNy4xNCkKKQojIGNvbG9yIGNvZGluZwplZHVfYXR0YWlubWVudCRDb2xvciA9IGlmZWxzZShlZHVfYXR0YWlubWVudCRCYWNoZWxvcl9QZXJjZW50ID4gMzUsICJncmVlbiIsICJyZWQiKQplZHVfYXR0YWlubWVudCRDb2xvciA9IGFzLmZhY3RvcihlZHVfYXR0YWlubWVudCRDb2xvcikKCiMgT3JkZXJpbmcgc3RhdGVzIGJ5IEJhY2hlbG9yX1BlcmNlbnQKZWR1X2F0dGFpbm1lbnQkU3RhdGUgPC0gZmFjdG9yKGVkdV9hdHRhaW5tZW50JFN0YXRlLCBsZXZlbHMgPSBlZHVfYXR0YWlubWVudCRTdGF0ZVtvcmRlcihlZHVfYXR0YWlubWVudCRCYWNoZWxvcl9QZXJjZW50LCBkZWNyZWFzaW5nID0gVFJVRSldKQoKIyBQbG90CmxpYnJhcnkoZ2dwbG90MikKZ2dwbG90KGRhdGEgPSBlZHVfYXR0YWlubWVudCwgYWVzKHggPSBTdGF0ZSwgeSA9IEJhY2hlbG9yX1BlcmNlbnQsIGZpbGwgPSBDb2xvcikpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImdyZWVuIiA9ICJncmVlbiIsICJyZWQiID0gInJlZCIpKSArIAogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJDb2xsZWdlIEVkdWNhdGlvbmFsIEF0dGFpbm1lbnQgYnkgU3RhdGUgKE9yZGVyZWQpIiwKICAgICAgIHggPSAiU3RhdGUiLAogICAgICAgeSA9ICJQZXJjZW50IG9mIEJhY2hlbG9yIERlZ3JlZXMgQXR0YWluZWQiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkgKwogIGd1aWRlcyhmaWxsPUZBTFNFKSAjIFJlbW92ZSBsZWdlbmQgZm9yIGNvbG9yCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMzUsIGNvbG9yID0gInJlZCIsIGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxKSAjIEFkZCByZWQgZGFzaGVkIGxpbmUgYXQgMzUlCgoKCgoKCmBgYAoKCg==