0

I'd like to create a sankey diagram using the highcharter library in R. Usually I'm just able to look at the javascript code for the plot and translate it for R, but for sankey plots I'm having some trouble. I'd like to just start by creating something like this: http://jsfiddle.net/highcharts/z2rL672w/3/

Here's my attempt so far. I'm having trouble where to place the "keys" argument.

highchart() %>%
  hc_chart(type='sankey') %>%
  hc_add_series_list(
    list(
      keys=c('from', 'to', 'weight')
    ),
    list(
      data=list(
        list(
          from='AT',
          to='DE',
          weight=10
        ),
        list(
          from='DE',
          to='CH',
          weight=5
        ),
        list(
          from='DE',
          to='FI',
          weight=5
        )
      )
    )
  )

EDIT:

I'm now trying the following. Still having a bit of trouble

library(highcharter)
library(tidyverse)
library(jsonlite)

dat <- data.frame(from=c('AT', 'DE', 'CH', 'DE'),
                   to=c('DE', 'CH', 'DE', 'FI'),
                   weight=c(10, 5, 15, 5)) %>%
  toJSON()

highchart() %>%
  hc_chart(type='sankey') %>%
  hc_series(dat)
Joe Bringley
  • 93
  • 10
  • You don't need `keys` property if your points are defined as JSONs (e.g. `{from: 'AT' to: 'DE', weight: 10}`): http://jsfiddle.net/BlackLabel/28r99qbj/ Practical usage of `keys` property is explained in the **API**: https://api.highcharts.com/highcharts/series.sankey.keys – Kamil Kulig May 09 '18 at 09:16
  • Thank you for the response! I'm still having a little trouble though. Can you check my attempt above? – Joe Bringley May 09 '18 at 14:37
  • I don't know much about R, so I don't know what exactly is going on in your code. Here's a list of supported data formats in Highcharts: https://www.highcharts.com/docs/chart-concepts/series Maybe it'll help. – Kamil Kulig May 10 '18 at 07:39

1 Answers1

1

I used the function hc_add_series (without keys) and it worked:

for the fisrt attempt:

highchart() %>%
  hc_chart(type = 'sankey') %>%
  hc_add_series(
      data = list(
        list(from = 'AT', to = 'DE', weight = 10),
        list(from = 'DE', to = 'CH', weight = 5),
        list(from = 'DE', to = 'FI', weight = 5))
      )

enter image description here

for the second attempt:

library(highcharter)
library(tidyverse)
library(jsonlite)

dat <- data.frame(from = c('AT', 'DE', 'CH', 'DE'),
                  to = c('DE', 'CH', 'DE', 'FI'),
                  weight = c(10, 5, 15, 5)) %>%
  toJSON()

highchart() %>%
  hc_chart(type = 'sankey') %>%
  hc_add_series(data = dat)

enter image description here

I hope that could help :)

edited note:

I use a development version 0.6.0 of highcharter, to install it please use: devtools::install_github("jbkunst/highcharter")

Ferand Dalatieh
  • 313
  • 1
  • 4
  • 14