## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----eval = TRUE, echo = F----------------------------------------------------
execute <- T
if(!all(c('maps', 'mapproj') %in% installed.packages())){
  execute <- F
  print("This vignetted requires the `maps` and `mapproj` packages to be installed for execution.")
}

## ----setup, warning=F, message=F, eval = execute------------------------------
library(PieGlyph)
library(ggplot2)
library(dplyr)

## ----create-boundaries, eval = execute----------------------------------------
states_boundaries <- map_data("state")

## ----boundaries, eval = execute-----------------------------------------------
head(states_boundaries)

## ----create-votes, eval = execute---------------------------------------------
set.seed(123)

# Get names of state names from map data
votes_data <- data.frame('State' = tolower(state.name))

# Simulate percentage of votes received in each state by the Democratic, Republic and other parties
votes_data <- votes_data %>% 
                mutate('Democratic' = round(runif(50, 1, 100)),
                       'Republic' = round(runif(50, 1, (100 - Democratic))),
                       'Other' = 100 - Democratic - Republic)

# Add the latitude and longitude of the geographical centers of the states to place the pies 
votes_data <- votes_data %>% 
                mutate('pie_lat' = state.center$y,
                       'pie_long' = state.center$x)

# Filter out any states that weren't present in the map_data
votes_data <- votes_data %>% filter(State %in% unique(states_boundaries$region))

## ----votes_data, eval = execute-----------------------------------------------
head(votes_data)

## ----map, warning = F, fig.align='center', fig.width=7, eval = execute--------
map <- ggplot(states_boundaries, aes(x = long, y = lat)) +
        # Add states and their borders
        geom_polygon(aes(group = group),
                     fill = 'darkseagreen', colour = 'black')+
        # Axis titles
        labs(x = 'Longitude', y ='Latitude')+
        # Blue background for the sea behind
        theme(panel.background = element_rect(fill = 'lightsteelblue2'))+
        # Coordinate system for maps
        coord_map()
map

## ----glyph-merc, warning = F, fig.align='center', fig.width=7, warning = F, eval = execute----
plot <- map + 
  # Add pie-charts for each state
  geom_pie_glyph(aes(y = pie_lat, x = pie_long),
                 data = votes_data, colour = 'black',
                 slices = c('Democratic','Republic','Other'))+
  # Colours of the pie sectors
  scale_fill_manual(values = c('#047db7','#c52d25', 'grey'), name = 'Party')+
  # Place legend on top of the plot
  theme(legend.position = 'top')
plot

## ----glyph-albers, warning = F, fig.align='center', fig.width=7, warning = F, message = F, eval = execute----
plot +
  # Different map projection
  coord_map('albers', lat0 = 45.5, lat1 = 29.5)

## ----glyph-gnomonic, warning = F, fig.align='center', fig.width=7, warning = F, message = F, eval = execute----
plot +
  # Different map projection
  coord_map('gnomonic')