Skip to contents

There are many plugins for highcharts created by both the Highsoft team and the community. The plugins can from adding features to series or legends, as well as in data export formats or adjusting regressions or smoothing.

Since there are many and some of them are for a particular or unusual use, they are not included in highchart. This is why these can be incorporated into the htmlwidget using thehc_add_dependency function.

It should be noted that from time to time the plugins interfere with each other so you must be careful in using them.

Regression

This plugin was created by Ignacio Vazquez (https://github.com/phpepe) and let you add a regression series to any existing series on your chart. Calculates the r-squared value (coefficient of determination) and optionally prints it on the legend. If Linear or Polynomial regression is selected, you can print the equation on the legend.

library(highcharter)

data(penguins, package = "palmerpenguins")

penguins <- penguins[complete.cases(penguins),]

hchart(
  penguins,
  "scatter",
  name = "Penguins",
  # opacity = 0.35,
  hcaes(x = flipper_length_mm, y = bill_length_mm),
  regression = TRUE,
  regressionSettings = list(
    type = "polynomial",
    dashStyle = "ShortDash",
    color = "skyblue",
    order = 3,
    lineWidth = 5,
    name = "%eq | r2: %r",
    hideInLegend = FALSE)
  ) |>
  hc_add_dependency("plugins/highcharts-regression.js")

Even you can get a regression for each series/group.

hchart(
  penguins, 
  "scatter",
  hcaes(x = flipper_length_mm, y = bill_length_mm, group = species),
  regression = TRUE
  ) |>
  hc_colors(c("#d35400", "#2980b9", "#2ecc71")) |>
  hc_add_dependency("plugins/highcharts-regression.js")

A detail of the each parameter can be found in the github page of this plugin: https://github.com/streamlinesocial/highcharts-regression#regression-settings.

Grouped Categories

Home page: http://blacklabel.github.io/grouped_categories/

Let’s try an example:

library(purrr) # map function to make grouped categories argument
library(dplyr) # for select function 

data(mpg, package = "ggplot2")

mpgg <- mpg |> 
  filter(!manufacturer %in% c("volkswagen", "chevrolet")) |> 
  filter(class %in% c("compact", "midsize", "subcompact")) |> 
  group_by(class, manufacturer) |> 
  summarize(count = n()) |> 
  ungroup()

categories_grouped <- mpgg |>
  select(class, manufacturer) |>
  group_by(name = class) |> 
  summarise(categories = list(manufacturer)) |> 
  list_parse()

hchart(
  mpgg,
  "column", 
  name = "Cars",
  hcaes(y = count)
  ) |> 
  hc_xAxis(
    # specify the grouped categories
    categories = categories_grouped, 
    # styling a little bit
    labels = list(style = list(fontSize = "10px"))
    ) |>
  hc_add_dependency("plugins/grouped-categories.js")

Colored area and colored line

More information in https://github.com/blacklabel/multicolor_series.

library(dplyr)

set.seed(123)

n <- 200

colors <- sample(viridisLite::cividis(5, end = .9))

df <- tibble(
  x = 1:n,
  y = abs(arima.sim(n = n, model = list(ar = c(0.9)))) + 2,
  y2 = 10 + y,
  col = rep(colors, each = n/10, length.out = n)
)

hchart(df, "coloredarea", hcaes(x, y, segmentColor = col)) |> 
   hc_add_series(df, "coloredline", hcaes(x, y2 , segmentColor = col)) |> 
   hc_add_dependency("plugins/multicolor_series.js")

Draggable-points

More details in https://api.highcharts.com/highcharts/plotOptions.series.dragDrop.

set.seed(123)

df <- tibble(x = runif(10), y = runif(10), z = runif(10), name = paste("cat", 1:10))

hchart(
  df,
  "bubble",
  hcaes(x = x, y = y),
  # showInLegend = TRUE,
  name = "You can move the points",
  cursor = "move",
  dragDrop = list(
    draggableX = TRUE,
    draggableY = TRUE
    )
  ) |> 
  hc_add_dependency("modules/draggable-points.js")
df$x <- NULL

hchart(
  df,
  "column",
  hcaes(x = name, y = y),
  showInLegend = TRUE,
  name = "You can move the points only Yaxis direction",
  cursor = 'ns-resize',
  dragDrop = list(
    draggableY = TRUE
    )
  ) |> 
  hc_add_dependency("modules/draggable-points.js")

Pattern fills

More information in https://www.highcharts.com/blog/tutorials/pattern-fills/.

Example taken from https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/series/pattern-fill-area.

# base chart without series
hc_fill <- highchart() |> 
  # add dependency
  hc_add_dependency("modules/pattern-fill.js") |> 
  hc_chart(type = 'area') |> 
  hc_title(text = 'Pattern fill plugin demo') |> 
  hc_xAxis(categories = c('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) |> 
  hc_plotOptions(
    area = list(
      fillColor = list(
        pattern = list(
          path = list(
            d = 'M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11',
            strokeWidth = 3
            ),
          width = 10,
          height = 10,
          opacity = 0.4
          )
        )
      )
    )

# test with 2 series
hc_fill |> 
  hc_add_series(
    data = c(29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6),
    color= '#88e',
    fillColor = list(
      pattern = list(
        color = '#11d'
      )
    )
    ) |> 
  hc_add_series(
    data = c(NA, NA, NA, NA, NA, 43.1, 95.6, 148.5, 216.4, 194.1, 95.6, 54.4),
    color = '#e88',
    fillColor = list(
      pattern = list(
        color= '#d11'
      )
    )
  )

More examples for fun.

# test with 1 series and a theme
hc_fill |> 
  hc_add_series(
    data = c(7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6),
    color= '#000',
    fillColor = list(
      pattern = list(
        color = '#000'
      )
    )
    ) |> 
  hc_add_theme(hc_theme_handdrawn())

Example from https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/series/infographic/ and inspired by https://www.amcharts.com/demos/pictorial-column-chart/

highchart() |> 
  # add the module
  hc_add_dependency("modules/pattern-fill.js") |> 
  hc_size(heigh = 350) |> 
  hc_xAxis(type = 'category') |> 
  hc_tooltip(
    borderColor = "#CACACA",
    pointFormat = 'The height for <b>{point.name}</b> is <b>{point.y}</b>'
    ) |> 
  # hc_chart(
  #   plotBackgroundColor = list(
  #     linearGradient = c(0, 0, 0, 500),
  #     stops = list(
  #       list(0.0, 'rgb(240, 178, 79)'),
  #       list(0.5, 'rgb(202, 108, 70)'),
  #       list(0.9, 'rgb(12, 5, 36)')
  #       )
  #     )
  # ) |> 
  # hc_xAxis(gridLineColor = 'transparent') |> 
  # hc_yAxis(gridLineColor = 'transparent') |> 
  hc_add_series(
    type = "column",
    showInLegend = FALSE,
    pointWidth = 110,
    pointPadding = 0.25,
    borderColor = "transparent",
    borderWidth = 0,
    data = list(
      list(
        name = "Petronas",
        y = 100,
        color = list(
          pattern = list(
             image = 'https://www.svgrepo.com/show/27082/petronas-towers.svg',
             aspectRatio = 1.3
          )
        )
      ),
      list(
        name = 'Pisa',
        y = 150,
        color = list(
          pattern = list(
            image = 'https://www.svgrepo.com/show/1171/tower-of-pisa.svg',
            aspectRatio = 1
          )
        )
      ),
      list(
        name = 'Eiffel tower',
        y = 200,
        color = list(
          pattern = list(
            image = 'https://www.svgrepo.com/show/19456/tokyo-tower.svg',
            aspectRatio = 0.8
            )
          )
      ),
      list(
        name = 'Ahu-tongariki',
        y = 250,
        color = list(
          pattern = list(
            image = 'https://www.svgrepo.com/show/27081/ahu-tongariki.svg',
            aspectRatio = 0.75
          )
        )
      )
    )
  )

And the last one.

dim(volcano)
## [1] 87 61
highchart() |> 
  hc_add_dependency("modules/pattern-fill.js") |> 
  hc_add_theme(hc_theme_null()) |> 
  hc_add_series(
    type = "area", # area needs fill color
    name = "Maunga Whau Volcano",
    color = "transparent",
    data = as.numeric(volcano[40, ]) - min(volcano[40, ]) + 1,
    fillColor = list(
      pattern = list(
        image = 'https://cdn.pixabay.com/photo/2014/12/04/02/02/wall-556100_960_720.jpg'
        )
      )
    )

List of modules and plugins in highcharter

You can use the next modules, plugins and and custom scripts:

dir(system.file("htmlwidgets/lib/highcharts/modules", package = "highcharter"))
##  [1] "accessibility.js"          "annotations-advanced.js"  
##  [3] "annotations.js"            "arc-diagram.js"           
##  [5] "arrow-symbols.js"          "boost-canvas.js"          
##  [7] "boost.js"                  "broken-axis.js"           
##  [9] "bullet.js"                 "coloraxis.js"             
## [11] "current-date-indicator.js" "cylinder.js"              
## [13] "data.js"                   "datagrouping.js"          
## [15] "debugger.js"               "dependency-wheel.js"      
## [17] "dotplot.js"                "drag-panes.js"            
## [19] "draggable-points.js"       "drilldown.js"             
## [21] "dumbbell.js"               "export-data.js"           
## [23] "exporting.js"              "full-screen.js"           
## [25] "funnel.js"                 "funnel3d.js"              
## [27] "gantt.js"                  "grid-axis.js"             
## [29] "heatmap.js"                "heikinashi.js"            
## [31] "histogram-bellcurve.js"    "hollowcandlestick.js"     
## [33] "item-series.js"            "lollipop.js"              
## [35] "map.js"                    "marker-clusters.js"       
## [37] "networkgraph.js"           "no-data-to-display.js"    
## [39] "offline-exporting.js"      "oldie-polyfills.js"       
## [41] "oldie.js"                  "organization.js"          
## [43] "overlapping-datalabels.js" "parallel-coordinates.js"  
## [45] "pareto.js"                 "pathfinder.js"            
## [47] "pattern-fill.js"           "price-indicator.js"       
## [49] "pyramid3d.js"              "sankey.js"                
## [51] "series-label.js"           "series-on-point.js"       
## [53] "solid-gauge.js"            "sonification.js"          
## [55] "static-scale.js"           "stock-tools.js"           
## [57] "stock.js"                  "streamgraph.js"           
## [59] "sunburst.js"               "tilemap.js"               
## [61] "timeline.js"               "treegrid.js"              
## [63] "treemap.js"                "variable-pie.js"          
## [65] "variwide.js"               "vector.js"                
## [67] "venn.js"                   "windbarb.js"              
## [69] "wordcloud.js"              "xrange.js"
dir(system.file("htmlwidgets/lib/highcharts/plugins", package = "highcharter"))
## [1] "draggable-legend.js"      "grouped-categories.js"   
## [3] "highcharts-regression.js" "motion.js"               
## [5] "multicolor_series.js"
dir(system.file("htmlwidgets/lib/highcharts/custom", package = "highcharter"))
## [1] "appear.js"          "delay-animation.js" "reset.js"          
## [4] "symbols-extra.js"   "text-symbols.js"    "tooltip-delay.js"