Load data

murders <- read.csv("murders.csv")
str(murders)
## 'data.frame':    51 obs. of  6 variables:
##  $ State            : Factor w/ 51 levels "Alabama","Alaska",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Population       : int  4779736 710231 6392017 2915918 37253956 5029196 3574097 897934 601723 19687653 ...
##  $ PopulationDensity: num  94.65 1.26 57.05 56.43 244.2 ...
##  $ Murders          : int  199 31 352 130 1811 117 131 48 131 987 ...
##  $ GunMurders       : int  135 19 232 93 1257 65 97 38 99 669 ...
##  $ GunOwnership     : num  0.517 0.578 0.311 0.553 0.213 0.347 0.167 0.255 0.036 0.245 ...

Show maps

Load US map data

library(maps)
## Warning: package 'maps' was built under R version 3.1.3
library(ggmap)
## Warning: package 'ggmap' was built under R version 3.1.3
## Loading required package: ggplot2
statesMap <- map_data("state")
str(statesMap)
## 'data.frame':    15537 obs. of  6 variables:
##  $ long     : num  -87.5 -87.5 -87.5 -87.5 -87.6 ...
##  $ lat      : num  30.4 30.4 30.4 30.3 30.3 ...
##  $ group    : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ order    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ region   : chr  "alabama" "alabama" "alabama" "alabama" ...
##  $ subregion: chr  NA NA NA NA ...

Murder Rate

Show map of USA

library(ggplot2)
ggplot(statesMap, aes(x=long, y=lat, group=group)) +
  geom_polygon(fill="white", color="black")

Make sure statesMap match murders and merge them

murders$region <- tolower(murders$State)
murderMap <- merge(statesMap, murders, by="region")
str(murderMap)
## 'data.frame':    15537 obs. of  12 variables:
##  $ region           : chr  "alabama" "alabama" "alabama" "alabama" ...
##  $ long             : num  -87.5 -87.5 -87.5 -87.5 -87.6 ...
##  $ lat              : num  30.4 30.4 30.4 30.3 30.3 ...
##  $ group            : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ order            : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ subregion        : chr  NA NA NA NA ...
##  $ State            : Factor w/ 51 levels "Alabama","Alaska",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Population       : int  4779736 4779736 4779736 4779736 4779736 4779736 4779736 4779736 4779736 4779736 ...
##  $ PopulationDensity: num  94.7 94.7 94.7 94.7 94.7 ...
##  $ Murders          : int  199 199 199 199 199 199 199 199 199 199 ...
##  $ GunMurders       : int  135 135 135 135 135 135 135 135 135 135 ...
##  $ GunOwnership     : num  0.517 0.517 0.517 0.517 0.517 0.517 0.517 0.517 0.517 0.517 ...

Plot murder map

ggplot(murderMap, aes(x=long, y=lat, group=group, fill=Murders)) +
  geom_polygon(color="black") +
  scale_fill_gradient(low="green", high="red", guide="legend")

Plot by population

ggplot(murderMap, aes(x=long, y=lat, group=group, fill=Murders)) +
  geom_polygon(color="black") +
  scale_fill_gradient(low="green", high="red", guide="legend")

Plot by murder RATE

murderMap$MurderRate <- murderMap$Murders / murderMap$Population * 100000
ggplot(murderMap, aes(x=long, y=lat, group=group, fill=MurderRate)) +
  geom_polygon(color="black") +
  scale_fill_gradient(low="green", high="red", guide="legend")

Due to Washington DC being outlying, so remove it

murderMap$MurderRate <- murderMap$Murders / murderMap$Population * 100000
ggplot(murderMap, aes(x=long, y=lat, group=group, fill=MurderRate)) +
  geom_polygon(color="black") +
  scale_fill_gradient(low="green", high="red", guide="legend", limits=c(0, 10))

Gun Ownership

murderMap$GunOwnerRate <- murderMap$GunOwnership / murderMap$Population * 1000
ggplot(murderMap, aes(x=long, y=lat, group=group, fill=GunOwnerRate)) +
  geom_polygon(color="black") +
  scale_fill_gradient(low="green", high="red", guide="legend")