Thanks to visit codestin.com
Credit goes to jkunst.com

Skip to contents

In this vignette we’ll review some examples to show what highcharts and highcharter can do in terms of customization and design.

HIMYM example

This is a bar graph describing my favorite pies including a pie chart describing my favorite bars. - Marshall Eriksen

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
    )

Pokemon

library(dplyr)
data(pokemon)

lvl_opts <-  list(
    list(
      level = 1,
      borderWidth = 0,
      borderColor = "transparent",
      dataLabels = list(
        enabled = TRUE,
        align = "left",
        verticalAlign = "top",
        style = list(
          fontSize = "12px", 
          textOutline = FALSE,
          color = "white",
          fontWeight = "normal"
          )
      )
    ),
    list(
      level = 2,
      borderWidth = 0,
      borderColor = "transparent",
      colorVariation = list(key = "brightness", to = 0.250),
      dataLabels = list(enabled = FALSE),
      style = list(
        fontSize = "8px",
        textOutline = FALSE, 
        color = "white", 
        fontWeight = "normal"
        )
    )
  )

pkmn_min <- pokemon |> 
  select(type_1, type_2, type_1_color) |>
  mutate(type_1 = stringr::str_to_title(type_1)) |> 
  mutate(type_2 = ifelse(is.na(type_2), type_1, paste(type_1, "-", type_2))) |>
  mutate(val = 1)

cols <- pkmn_min |> 
  count(type_1, type_2, type_1_color, sort = TRUE) |> 
  pull(type_1_color) |> 
  unique()

hchart(
  data_to_hierarchical(pkmn_min, c(type_1, type_2), val, colors = cols),
  type = "treemap",
  # levelIsConstant = FALSE,
  allowDrillToNode = TRUE,
  levels = lvl_opts,
  tooltip = list(valueDecimals = FALSE)
  ) |> 
  hc_chart(
    style = list(fontFamily = "Gloria Hallelujah")
  ) |> 
  hc_title(
    text = "Gotta Catch 'Em All!",
    style = list(fontFamily = "Gloria Hallelujah")
    ) |> 
  hc_size(height = 700)

Weathers Radials

Example inspired by http://weather-radials.com/.

library(highcharter)
data(weather)

x <- c("Min", "Mean", "Max")
y <- sprintf("{point.%s}°", c("min_temperaturec", "mean_temperaturec", "max_temperaturec"))

tltip <- tooltip_table(x, y)

hchart(
  weather,
  type = "columnrange",
  hcaes(
    x = date, 
    low = min_temperaturec, 
    high = max_temperaturec,
    color = mean_temperaturec
    )
  ) |>
  hc_chart(
    polar = TRUE
    ) |>
  hc_yAxis(
    max = 30,
    min = -10,
    labels = list(format = "{value} C"),
    showFirstLabel = FALSE
  ) |>
  hc_xAxis(
    title = list(text = ""), 
    gridLineWidth = 0.5,
    labels = list(format = "{value: %b}")
  ) |>
  hc_tooltip(
    useHTML = TRUE,
    pointFormat = tltip,
    headerFormat = as.character(tags$small("{point.x:%d %B, %Y}"))
  ) |> 
  hc_title(
    text = "Climatical characteristics of San Francisco"
  ) |> 
  hc_size(
    height = 600
  )

Stars

Inspired by Nadieh Bremer’s block.

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
    )

The Impact of Vaccines

From WSJ graphic: Battling Infectious Diseases in the 20th Century:

data(vaccines)

fntltp <- JS("function(){
  return this.point.x + ' ' +  this.series.yAxis.categories[this.point.y] + ': ' +
  Highcharts.numberFormat(this.point.value, 2);
}")

plotline <- list(
  color = "#fde725", value = 1963, width = 2, zIndex = 5,
  label = list(
    text = "Vaccine Intoduced", verticalAlign = "top",
    style = list(color = "#606060"), textAlign = "left",
    rotation = 0, y = -5
  )
)

hchart(
  vaccines, 
  "heatmap", 
  hcaes(
    x = year,
    y = state, 
    value = count
    )
  ) |>
  hc_colorAxis(
    stops = color_stops(10, viridisLite::inferno(10, direction = -1)),
    type = "logarithmic"
  ) |>
  hc_yAxis(
    title = list(text = ""),
    reversed = TRUE, 
    offset = -20,
    tickLength = 0,
    gridLineWidth = 0, 
    minorGridLineWidth = 0,
    labels = list(style = list(fontSize = "9px"))
  ) |>
  hc_tooltip(
    formatter = fntltp
    ) |>
  hc_xAxis(
    plotLines = list(plotline)) |>
  hc_title(
    text = "Infectious Diseases and Vaccines"
    ) |>
  hc_subtitle(
    text = "Number of cases per 100,000 people"
  ) |> 
  hc_legend(
    layout = "horizontal",
    verticalAlign = "top",
    align = "left",
    valueDecimals = 0
  ) |>
  hc_size(height = 900)