---
title: "Data Visualization Lab Key"
output: html_document
editor_options: 
  chunk_output_type: console
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


```{r, message=FALSE}
library(readr)
library(ggplot2)
library(tidyr)
library(dplyr)
library(lubridate)
library(stringr)
library(jhur)
```

## Read in Data

Read in the charm city circulator dataset:

`circ = read_csv("http://johnmuschelli.com/intro_to_r/data/Charm_City_Circulator_Ridership.csv")`
or `circ = read_circulator()`

```{r}
circ = read_csv("http://johnmuschelli.com/intro_to_r/data/Charm_City_Circulator_Ridership.csv")
# covert dates
circ = mutate(circ, date = mdy(date))
# change colnames for reshaping
colnames(circ) =  colnames(circ) %>% 
  str_replace("Board", ".Board") %>% 
  str_replace("Alight", ".Alight") %>% 
  str_replace("Average", ".Average") 

# make long
long = gather(circ, "var", "number", 
              starts_with("orange"),
              starts_with("purple"), starts_with("green"),
              starts_with("banner"))
# separate
long = separate(long, var, into = c("route", "type"), 
	sep = "[.]")
```

or run: 
```{r}
long = read_circulator_long() %>% 
  rename(route = line)
```

```{r}
## take just average ridership per day
avg = filter(long, type == "Average")
avg = filter(avg, !is.na(number))

# separate
type_wide = spread(long, type, value = number)
head(type_wide)
```


# Part 1

In these questions, try to use `ggplot2` if possible.

1. Plot average ridership (`avg` data set) by `date`.
```{r}
q = qplot(x = date, y = number, data = avg)
q + xlim(ymd("2011/05/03", "2012/06/04"))

g = ggplot(avg, aes(x = date, y = number))
g + geom_point()
g + geom_point() + xlim(ymd("2011/05/03", "2012/06/04"))


```

a. Color the points by route (`orange`, `purple`, `green`, `banner`)
```{r}
qplot(x = date, y = number, data = avg, colour = route)

first_plot = qplot(x = date, y = number, data = avg, colour = route)
print(first_plot)


g = ggplot(avg, aes(x = date, y = number, color = route))
g + geom_point()

```

b. add black smoothed curves for each route
```{r}
qplot(x = date, y = number, data = avg, colour = route) + geom_smooth(aes(group = route), colour= "black")

qplot(x = date, y = number, data = avg, colour = route) + geom_smooth()

g + geom_point() + geom_smooth(color="black")

g + geom_point() + geom_smooth()


```


c. Color the points by day of the week
```{r}
qplot(x = date, y = number, data = avg, colour = day)
qplot(x = date, y = number, data = avg, colour = route) + geom_smooth()

avg = avg %>% mutate(dayFactor = factor(day, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")))
g = ggplot(avg, aes(x = date, y = number, color = dayFactor))
g + geom_point()

```


2. Replot 1a where the colors of the points are the name of the `route` (with `banner` --> `blue`)

```{r}
pal = c(banner = "blue", purple = "purple", green=  "darkgreen", orange = "orange")
qplot(x = date, y = number, data = avg, colour = route) +
	  scale_colour_manual(values = pal)

g = ggplot(avg, aes(x = date, y = number, color = route))
g + geom_point() + scale_colour_manual(values = pal)

```

# Part 2

3. plot average ridership by date with one panel per `route`
```{r}
qplot(x = date, y = number, data= avg, facets = ~route) 
qplot(x = date, y = number, data= avg) +
  facet_wrap( ~ route)

qplot(x = date, y = number, data= avg) +
  facet_wrap( ~ route, ncol =4)

qplot(x = date, y = number, data= avg, facets = ~route,	colour = route) +  scale_colour_manual(values=pal)

g = ggplot(avg, aes(x = date, y = number, color = route))
g + geom_point() +  facet_wrap( ~ route) + scale_colour_manual(values=pal)

```
	  
4. Plot average ridership by date with separate panels by `day` of the week, colored by `route`
```{r}
qplot(x = date, y = number, data= avg, facets = ~day,
	colour = route) +  scale_colour_manual(values=pal)

ggplot(aes(x = date, y = number, colour = route), data= avg) + 
  geom_point() + 
  facet_wrap( ~day) +  scale_colour_manual(values=pal)
```

# Part 3

5. Plot average ridership (`avg`) by date, colored by `route` (same as 1a). 
(do not take an average, 
use the average column for each route)
Make the x-label `"Year"`
Make the y-label `"Number of People"`
Use the black and white theme `theme_bw()`
Change the `text_size` to (`text = element_text(size = 20)`)
in `theme`
 
```{r} 
first_plot = ggplot(avg, aes(x = date, y = number, color = route)) + geom_point() + scale_colour_manual(values=pal)


first_plot  +
  xlab("Year") + ylab("Number of People") + theme_bw() + 
  theme(text = element_text(size = 20))
```

6. Plot average ridership on the `orange` route versus date
as a solid line, and add `dashed` "error" lines based 
on the `boardings` and `alightings.` 
the line colors should be `orange.`
(hint `linetype` is an aesthetic for lines) - see also `scale_linetype` and 
`scale_linetype_manual`
`Alightings = "dashed", Boardings = "dashed", Average = "solid"`
```{r}
orange = long %>% filter(route == "orange")
```

line type is dashed
```{r} 
ggplot(orange, aes(x = date, y = number)) + 
  geom_line(linetype = "dashed", colour ="orange")
```

dont do this, trying to find column named `orange`
```{r} 
ggplot(orange, aes(x = date, y = number)) + 
  geom_line(linetype = "dashed", aes(colour="orange"))
```

now line dashedness  varies by the `type`

```{r}
ggplot(orange, aes(x = date, y = number)) + 
  geom_line(aes(linetype = type), colour = "orange")
```

this one as a quick plot

```{r} 
qplot(data = orange, x = date, y = number,
      linetype = type, geom = "line", colour = "orange")

ggplot(orange, aes(x = date, y = number)) + 
  geom_line(aes(linetype = type), colour = "orange") + 
  scale_linetype_manual(values = c("dashed",
              "dashed", "solid"))
```

```{r}
ggplot(orange, aes(x = date, y = number)) + 
  geom_line(aes(linetype = type), colour = "orange") + 
  scale_linetype_manual(
      values = c(Alightings = "dashed",
             Boardings = "dashed", 
             Average = "solid"))
```

