-
-
Save arbelt/f163edcb88480c212734 to your computer and use it in GitHub Desktop.
Supreme Annotations - moar splainin here: http://rud.is/b/2016/03/16/supreme-annotations/ - NOTE: this requires the github version of ggplot2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CAVEATS: | |
# | |
# 1. This requires nonstandard fonts. Showtext is the best way to handle this portably, BUT | |
# it doesn't work within the RStudio viewer pane. Exported files (and knitr) are fine, also | |
# interactive sessions without RStudio (e.g., using XQuartz). | |
# | |
# When working in RStudio, I generally don't change the font and preview an "ugly" version | |
# of the chart. Just make sure all the elements are set when exporting. | |
# | |
# To set up showtext: | |
library(showtext) | |
font.add.google("Open Sans Condensed", "Open Sans Condensed", regular.wt = 300) | |
showtext.auto() | |
# In knitr, set the fig.showtext CHUNK PARAMETER to TRUE. Globally (for a file), you can put | |
# this in a chunk at the top: | |
library(knitr) | |
opts_chunk$set(fig.showtext = TRUE) | |
# or just set it for specific chunks | |
# 2. geom_label with label.size = 0 doesn't work (for me, at least) on the default pdf | |
# device. You'll need to use CairoPDF to get the boxes to disappear. This may or may | |
# not be a little complicated to get working completely. | |
# | |
# **THEME** | |
# This is just a way to package most aspects of the above theme to make it easier to use more | |
# generally. | |
# | |
# Note that you will typically need to manually tweak the x and y axes, as well as the legend | |
# on a per-plot basis. | |
# | |
# For the axes, you usually want to get rid of the automatic space at the edges (this is why | |
# bar plots are by default lifted above the axis). This is done with the expand parameter: | |
# | |
# scale_x_continuous(expand = c(0,0), ...) | |
# | |
# But this will probably also require you to set the limits of the axis manually to prevent cutoff, | |
# etc. | |
# | |
# First, set the global theme used for all plots: | |
theme_set(theme_minimal(base_family = "Open Sans Condensed")) | |
# Define the set of theme modifications. Then for any ggplot object this can be added | |
# to apply the theme, e.g., | |
# | |
# p <- ggplot(df) + ... | |
# p <- p + theme_mods | |
# | |
theme_mods <- theme( | |
legend.position = c(0,1), | |
legend.justification = c(0,1), | |
legend.text = element_text(size = 8, face = "bold"), | |
legend.key.size = unit(3, "mm"), | |
plot.margin = unit(rep(0.5,4), "cm"), | |
panel.grid = element_line(), | |
panel.grid.major.x = element_blank(), | |
panel.grid.minor.x = element_blank(), | |
panel.grid.minor.y = element_blank(), | |
panel.grid.major.y = element_line(color = "#2b2b2b", linetype = "dotted", size = 0.15), | |
axis.text.y = element_text(margin = margin(r = 0)), | |
axis.ticks.x = element_line(size = 0.15, color = "#2b2b2b"), | |
axis.ticks.y = element_blank(), | |
axis.ticks.length = unit(5, "pt"), | |
axis.line = element_line(size = 0.15), | |
axis.line.x = element_line(size = 0.15, color = "#2b2b2b"), | |
plot.title = element_text(face = "bold"), | |
plot.caption = element_text(size = 8, hjust = 0, margin = margin(t = 15))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(ggplot2) | |
dat <- read.csv("supreme_court_vacancies.csv", | |
col.names=c("year", "wait")) | |
# We only want every other tick labeled | |
xlabs <- seq(1780, 2020, by=10) | |
xlabs[seq(2, 24, by=2)] <- " " | |
# Pretty long caption | |
caption <- "Note: Vacancies are counted as the number of days between a justice's death, retirement or resignation and the successor justice's swearing in (or commissioning in the case of a recess appointment) as a member of the court.Sources: U.S. Senate, 'Supreme Court Nominations, present-1789'; Supreme Court, 'Members of the Supreme Court of the United States'; Pew Research Center calculations" | |
caption <- paste0(strwrap(caption, 160), sep="", collapse="\n") | |
# you could probably just use caption <- label_wrap_gen(160)(caption) instead | |
annot <- read.table(text= | |
"year|wait|just|text | |
1848|860|0|Robert Cooper Grier was sworn in Aug 10, 1846,<br>841 days after the death of Henry Baldwin | |
1969|440|1|Henry Blackmun was sworn<br>in June 9, 1970, 391 days<br>after Abe Fortas resigned. | |
1990|290|0|Anthony Kennedy<br>was sworn in Feb.<br>18, 1988, 237<br>days after Lewis<br>Powell retired.", | |
sep="|", header=TRUE, stringsAsFactors=FALSE) | |
annot$text <- gsub("<br>", "\n", annot$text) | |
gg <- ggplot() | |
gg <- gg + geom_point(data=dat, aes(x=year, y=wait)) | |
gg <- gg + geom_label(aes(x=1780, y=900, label="days"), | |
family="OpenSans-CondensedLight", | |
size=3.5, hjust=0, label.size=0, color="#2b2b2b") | |
gg <- gg + geom_label(data=annot, aes(x=year, y=wait, label=text, hjust=just), | |
family="OpenSans-CondensedLight", lineheight=0.95, | |
size=3, label.size=0, color="#2b2b2b") | |
gg <- gg + scale_x_continuous(expand=c(0,0), | |
breaks=seq(1780, 2020, by=10), | |
labels=xlabs, limits=c(1780,2020)) | |
gg <- gg + scale_y_continuous(expand=c(0,10), | |
breaks=seq(100, 900, by=100), | |
limits=c(0, 1000)) | |
gg <- gg + labs(x=NULL, y=NULL, | |
title="Lengthy Supreme Court vacancies are rare now, but weren't always", | |
subtitle="Supreme Court vacancies, by duration", | |
caption=caption) | |
gg <- gg + theme_minimal(base_family="OpenSans-CondensedLight") | |
gg <- gg + theme(panel.grid=element_line()) | |
gg <- gg + theme(panel.grid.major.y=element_line(color="#2b2b2b", linetype="dotted", size=0.15)) | |
gg <- gg + theme(panel.grid.major.x=element_blank()) | |
gg <- gg + theme(panel.grid.minor.x=element_blank()) | |
gg <- gg + theme(panel.grid.minor.y=element_blank()) | |
gg <- gg + theme(axis.line=element_line()) | |
gg <- gg + theme(axis.line.x=element_line(color="#2b2b2b", size=0.15)) | |
gg <- gg + theme(axis.ticks=element_line()) | |
gg <- gg + theme(axis.ticks.x=element_line(color="#2b2b2b", size=0.15)) | |
gg <- gg + theme(axis.ticks.y=element_blank()) | |
gg <- gg + theme(axis.ticks.length=unit(5, "pt")) | |
gg <- gg + theme(plot.margin=unit(rep(0.5, 4), "cm")) | |
gg <- gg + theme(axis.text.y=element_text(margin=margin(r=-5))) | |
gg <- gg + theme(plot.title=element_text(family="OpenSans-CondensedBold", margin=margin(b=15))) | |
gg <- gg + theme(plot.subtitle=element_text(family="OpenSans-CondensedLightItalic")) | |
gg <- gg + theme(plot.caption=element_text(size=8, hjust=0, margin=margin(t=15))) | |
gg |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
year | wait | |
---|---|---|
1845 | 841 | |
1792 | 152 | |
1793 | 43 | |
1795 | 103 | |
1795 | 70 | |
1795 | 4 | |
1799 | 37 | |
1800 | 141 | |
1801 | 180 | |
1803 | 98 | |
1806 | 62 | |
1811 | 504 | |
1811 | 154 | |
1823 | 166 | |
1825 | 133 | |
1829 | 55 | |
1830 | 500 | |
1835 | 264 | |
1835 | 164 | |
1836 | 483 | |
1842 | 314 | |
1845 | 440 | |
1845 | 6 | |
1851 | 17 | |
1852 | 260 | |
1857 | 111 | |
1862 | 780 | |
1862 | 584 | |
1862 | 293 | |
1864 | 66 | |
1869 | 43 | |
1872 | 43 | |
1873 | 301 | |
1878 | 275 | |
1880 | 111 | |
1880 | 19 | |
1882 | 162 | |
1882 | 66 | |
1887 | 244 | |
1887 | 191 | |
1890 | 293 | |
1891 | 76 | |
1892 | 39 | |
1892 | 266 | |
1894 | 244 | |
1896 | 152 | |
1897 | 57 | |
1902 | 6 | |
1903 | 84 | |
1906 | 207 | |
1909 | 199 | |
1909 | 72 | |
1910 | 166 | |
1910 | 45 | |
1910 | 17 | |
1911 | 154 | |
1914 | 92 | |
1916 | 156 | |
1916 | 121 | |
1920 | 55 | |
1922 | 53 | |
1922 | 10 | |
1924 | 53 | |
1929 | 14 | |
1930 | 80 | |
1931 | 62 | |
1936 | 76 | |
1938 | 58 | |
1938 | 10 | |
1939 | 207 | |
1939 | 76 | |
1941 | 158 | |
1941 | 0 | |
1942 | 137 | |
1942 | 14 | |
1944 | 58 | |
1946 | 64 | |
1948 | 35 | |
1953 | 25 | |
1955 | 170 | |
1956 | 0 | |
1956 | 23 | |
1958 | 0 | |
1962 | 37 | |
1962 | 21 | |
1964 | 68 | |
1968 | 0 | |
1968 | 111 | |
1970 | 391 | |
1972 | 115 | |
1972 | 103 | |
1976 | 41 | |
1981 | 82 | |
1986 | 2 | |
1987 | 237 | |
1990 | 19 | |
1990 | 82 | |
1992 | 43 | |
1994 | 0 | |
2005 | 0 | |
2005 | 25 | |
2009 | 41 | |
2010 | 41 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment