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 ...
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 ...
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))
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")