Skip to content

Instantly share code, notes, and snippets.

@dsparks
Created October 25, 2012 22:09
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dsparks/3955788 to your computer and use it in GitHub Desktop.
Save dsparks/3955788 to your computer and use it in GitHub Desktop.
Plotting letters as shapes
doInstall <- TRUE # Change to FALSE if you don't want packages installed.
toInstall <- c("foreign", "ggplot2", "devtools")
if(doInstall){install.packages(toInstall, repos = "http://cran.r-project.org")}
lapply(toInstall, library, character.only = TRUE)
source_gist("https://gist.github.com/818983")
source_gist("https://gist.github.com/818986")
source_gist("https://gist.github.com/818998")
# Get NOMINATE data from voteview.org
dwNominate <- read.dta("ftp://voteview.com/junkord/HL01111E21_PRES.DTA")
partyTable <- readLines("http://voteview.org/party3.htm")
partyTable <- partyTable[(lineFinder("PRE>", partyTable)[1]+1):
(lineFinder("PRE>", partyTable)[2]-1)] # Merge party names...
partyNumber <- as.numeric(substr(partyTable, 1, 7))
partyTable <- spaceTrim(substr(partyTable, 9, 1000))
names(partyTable) <- partyNumber
dwNominate$partyName <- partyTable[as.character(dwNominate$party)]
# Choose a Congress with a lot of parties:
dwNominate <- dwNominate[dwNominate$cong == 18 &
dwNominate$statenm != "USA", ] # 77 is also a good example.
zp1 <- ggplot(dwNominate,
aes(x = dwnom1, y = dwnom2,
shape = partyName, colour = partyName))
zp1 <- zp1 + geom_point()
zp1 <- zp1 + scale_colour_brewer(palette = "Paired")
zp1 <- zp1 + theme_bw()
print(zp1) # So, lots of different shapes
# In fact, ggplot2 resists plotting more than 6 shapes.
# Denote parties by their initial letter.
dwNominate$partyInitial <- substr(dwNominate$partyName, 1, 1)
zp2 <- ggplot(dwNominate,
aes(x = dwnom1, y = dwnom2,
label = partyInitial, colour = partyName))
zp2 <- zp2 + geom_text(size = 3)
zp2 <- zp2 + scale_colour_brewer(palette = "Paired")
zp2 <- zp2 + theme_bw()
print(zp2) # Initials in the plot, but "a" in the legend
# Convert from letters to UTF-8 encoded "shapes"
uniqueInitials <- c("a", "A", "c", "C", "j", "J", "R")
initialShapes <- unlist(lapply(uniqueInitials, utf8ToInt))
zp3 <- ggplot(dwNominate,
aes(x = dwnom1, y = dwnom2,
shape = partyName, colour = partyName))
zp3 <- zp3 + geom_point(size = 3)
zp3 <- zp3 + scale_colour_brewer(palette = "Paired")
zp3 <- zp3 + theme_bw() # \/ Manually select letter-shapes
zp3 <- zp3 + scale_shape_manual(values = initialShapes)
print(zp3) # Initials in the plot and in the legend!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment