---
title: "Rmarkdown Presentation including Plotly"
output: 
  revealjs::revealjs_presentation
---

# Setup

```{r, message=FALSE}
knitr::opts_chunk$set(echo = FALSE)
knitr::opts_template$set(demo = list(echo = TRUE, eval = FALSE))
xfun::pkg_attach2("highcharter")
xfun::pkg_load2("palmerpenguins")
data(penguins, package = "palmerpenguins")
```


# Simple example

```{r simple}
hchart(penguins, "scatter", hcaes(x = flipper_length_mm, y = bill_length_mm, group = species))
```

## Code

```{r simple, opts.label = "demo"}
```

# Simple2 example

```{r simple2}
x <- c(rnorm(10000), rnorm(1000, 4, 0.5))
hchart(x, name = "data") 
```

## Code

```{r simple2, opts.label = "demo"}
```

# venn

```{r venn}
highchart() %>% 
  hc_chart(type = "venn") %>% 
  hc_add_series(
    dataLabels = list(style = list(fontSize = "20px")),
    name = "Venn Diagram",
    data = list(
      list(
        name = "People who are<br>breaking my heart.",
        sets = list("A"), value = 5
        ),
      list(
        name = "People who are shaking<br> my confidence daily.",
        sets = list("B"), value = 5
        ),
      list(
        name = "Cecilia", sets = list("B", "A"), value = 1)
      )
  )
```

## Code

```{r venn, opts.label = "demo"}
```

https://jkunst.com/highcharter/articles/highcharts.html#venn-euler-1

# HIMYM example

```{r himym, message=FALSE}
data(favorite_bars)
data(favorite_pies)

highchart() %>% 
  # Data
  hc_add_series(
    favorite_pies, 
    "column",
    hcaes(
      x = pie,
      y = percent
      ),
    name = "Pie"
    ) %>%
  hc_add_series(
    favorite_bars,
    "pie",
    hcaes(
      name = bar,
      y = percent
      ),
    name = "Bars"
    ) %>%
  # Options for each type of series
  hc_plotOptions(
    series = list(
      showInLegend = FALSE,
      pointFormat = "{point.y}%",
      colorByPoint = TRUE
      ),
    pie = list(
      center = c('30%', '10%'),
      size = 120,
      dataLabels = list(enabled = FALSE)
      )
    ) %>%
  # Axis
  hc_yAxis(
    title = list(text = "percentage of tastiness"),
    labels = list(format = "{value}%"), 
    max = 100
  ) %>% 
  hc_xAxis(
    categories = favorite_pies$pie
    ) %>%
  # Titles, subtitle, caption and credits
  hc_title(
    text = "How I Met Your Mother: Pie Chart Bar Graph"
  ) %>% 
  hc_subtitle(
    text = "This is a bar graph describing my favorite pies
    including a pie chart describing my favorite bars"
  ) %>%
  hc_caption(
    text = "The values represented are in percentage of tastiness and awesomeness."
    ) %>% 
  hc_credits(
    enabled = TRUE, text = "Source: HIMYM",
    href = "https://www.youtube.com/watch?v=f_J8QU1m0Ng",
    style = list(fontSize = "12px")
  ) %>% 
  hc_size(
    height = 600
    )
```

## Code

https://jkunst.com/highcharter/articles/showcase.html#himym-example-1

```{r himym, opts.label = "demo"}
```

# Stars

```{r stars}
data(stars)

colors <- c(
  "#FB1108", "#FD150B", "#FA7806", "#FBE426", "#FCFB8F",
  "#F3F5E7", "#C7E4EA", "#ABD6E6", "#9AD2E1"
)

stars$color <- highcharter::colorize(log(stars$temp), colors)

x <- c("Luminosity", "Temperature", "Distance", "Radius")
y <- sprintf("{point.%s:.2f}", c("lum", "temp", "distance", "radiussun"))

tltip <- tooltip_table(x, y)

hchart(
  stars,
  "scatter",
  hcaes(
    temp, 
    lum, 
    size = radiussun, 
    color = color
    ),
  minSize = 2,
  maxSize = 20
  ) %>%
  hc_chart(
    # backgroundColor = "black"
    backgroundColor = hex_to_rgba("black", 0.5),
    divBackgroundImage = "http://www.wired.com/images_blogs/underwire/2013/02/xwing-bg.gif"
    ) %>%
  hc_xAxis(
    title = list(text = "Temperature"),
    type = "logarithmic",
    gridLineWidth = 0,
    reversed = TRUE
    ) %>%
  hc_yAxis(
    title = list(text = "Luminosity"),
    type = "logarithmic", 
    gridLineWidth = 0
    ) %>%
  hc_title(
    style = list(color = hex_to_rgba("white", 0.5)),
    text = "Our nearest Stars"
    ) %>%
  hc_subtitle(
    style = list(color = hex_to_rgba("white", 0.5)),
    text = "In a Hertzsprung-Russell diagram"
    ) %>%
  hc_tooltip(
    useHTML = TRUE,
    headerFormat = "",
    pointFormat = tltip
    ) %>%
  hc_size(
    height = 700
    )
```

## Code

https://jkunst.com/highcharter/articles/showcase.html#himym-example-1

```{r stars, opts.label = "demo"}
```

