Search code examples
rhighchartslegendr-highcharter

Removing "Series 1" in legend and ordering legend


I am creating a funny jigsaw puzzle curve and want to know the following from how I wrote the code below:

Dataset

Zone <- c('Overwhelm State', 'Overwhelm State', 'Puzzle Pairing State', 
  'Puzzle Pairing State', 'Puzzle Pairing State', 'Puzzle Pairing State', 
  'Puzzle Pairing State', 'Puzzle Pairing State', 'Puzzle Pairing State',
  '"I can do this" State', '"I can do this" State', '"I can do this" State',
  'Lost State','Lost State','Lost State','Lost State', 'Close Out State',
  'Close Out State', 'Close Out State','Close Out State', 'Close Out State', 
  'Close Out State')

`Jigsaw Puzzle Pieces`<- c(0.20, 0.10, 0.20, 0.40, 0.80, 1.60, 3.20, 
6.40, 12.80, 14.00,15.00, 18.00, 31.85, 33.50, 33.50, 31.85, 15.93, 
7.96, 3.98, 1.99, 1.00, 0.50)

Date <- as.Date(c('2020-03-28','2020-03-29','2020-03-30','2020-03-31',
  '2020-04-01','2020-04-02','2020-04-03','2020-04-04','2020-04-05','2020-04-06',    '2020-04-07','2020-04-08','2020-04-09','2020-04-10','2020-04-11','2020-04-12',
  '2020-04-13','2020-04-14','2020-04-15','2020-04-16','2020-04-17','2020-04-18'))

jigsaw_data <- data.frame(Date, `Jigsaw Puzzle Pieces`, Zone)

1) How do I change the font size of the title?

2) How do I remove the value "Series 1" from the legend but keep the line appearing on the graph?

3) How do I order the legend so that it is:

"Overwhelm State"
"Puzzle Pairing State"
"I can do this" State
"Lost State"
"Close Out State"

Code below:

library(highcharter)
highchart() %>%
  hc_add_series(jigsaw_data, type = "line", lineWidth = 10,
               hcaes(x = Date, y = `Jigsaw Puzzle Pieces`)) %>%
  hc_add_series(jigsaw, type = "column",
               hcaes(x = Date, y = `Jigsaw Puzzle Pieces`, group = Zone)) %>%
  hc_xAxis(type = 'datetime', labels = list(format = '{value:%b %d}')) %>%
  hc_title(text = "<b>Jigsaw Puzzle Modelling Curve</b>") %>%
  hc_subtitle(text = "<b>COVID-19 Bias<b>") %>%
  hc_xAxis(title = list(text = '<b>Quarantine Period<b>',lineWidth = 3)) %>%
  hc_yAxis(title = list(text = '<b>Time Required to Insert One Puzzle Piece<b>')) %>%
  hc_legend(align = "right", verticalAlign = "top",
            layout = "vertical", x = 0, y = 100) 

enter image description here


Solution

    1. You can change the font size of the title using https://api.highcharts.com/highcharts/title.style

    2. You can remove the first series from legend by setting series.showInLegend: false https://api.highcharts.com/highcharts/series.line.showInLegend

    3. You can position your series in legend using series.legendIndex: https://api.highcharts.com/highcharts/series.line.legendIndex

    If you want me to show you how to do it in your code (I will edit answer), then please provide all the code with data. For now, when trying to run your code by copy/paste in RStudio, I am getting error "object 'jigsaw' not found".

    edit: this it the whole code. My way is not perfect (I used JavaScript because I don't know R), but it works as you expected:

    library(highcharter)
    Zone <- c('Overwhelm State', 'Overwhelm State', 'Puzzle Pairing State', 
              'Puzzle Pairing State', 'Puzzle Pairing State', 'Puzzle Pairing State', 
              'Puzzle Pairing State', 'Puzzle Pairing State', 'Puzzle Pairing State',
              '"I can do this" State', '"I can do this" State', '"I can do this" State',
              'Lost State','Lost State','Lost State','Lost State', 'Close Out State',
              'Close Out State', 'Close Out State','Close Out State', 'Close Out State', 
              'Close Out State')
    
    `Jigsaw Puzzle Pieces`<- c(0.20, 0.10, 0.20, 0.40, 0.80, 1.60, 3.20, 
                               6.40, 12.80, 14.00,15.00, 18.00, 31.85, 33.50, 33.50, 31.85, 15.93, 
                               7.96, 3.98, 1.99, 1.00, 0.50)
    
    Date <- as.Date(c('2020-03-28','2020-03-29','2020-03-30','2020-03-31',
                      '2020-04-01','2020-04-02','2020-04-03','2020-04-04','2020-04-05','2020-04-06',    '2020-04-07','2020-04-08','2020-04-09','2020-04-10','2020-04-11','2020-04-12',
                      '2020-04-13','2020-04-14','2020-04-15','2020-04-16','2020-04-17','2020-04-18'))
    
    jigsaw_data <- data.frame(Date, `Jigsaw Puzzle Pieces`, Zone)
    
    highchart() %>%
      hc_add_series(jigsaw_data, type = "line", lineWidth = 10,
                    hcaes(x = Date, y = `Jigsaw Puzzle Pieces`)) %>%
      hc_add_series(jigsaw_data, type = "column",
                    hcaes(x = Date, y = `Jigsaw Puzzle Pieces`, group = Zone)) %>%
      hc_chart(events = list(load = JS("function() {
    
        this.series.forEach(function(series) {
          if (series.name === 'Series 1') {
            series.update({
              showInLegend: false
            });
          }
          if (series.name === '\"I can do this\" State') {
            series.update({
              legendIndex: 2
            });
          }
          if (series.name === 'Close Out State') {
            series.update({
              legendIndex: 4
            });
          }
          if (series.name === 'Lost State') {
            series.update({
              legendIndex: 3
            });
          }
          if (series.name === 'Overwhelm State') {
            series.update({
              legendIndex: 0
            });
          }
          if (series.name === 'Puzzle Pairing State') {
            series.update({
              legendIndex: 1
            });
          }
        });
    
      }"))) %>%
      hc_xAxis(type = 'datetime', labels = list(format = '{value:%b %d}')) %>%
      hc_title(text = "<b>Jigsaw Puzzle Modelling Curve</b>", style = list(fontSize = '30px')) %>%
      hc_subtitle(text = "<b>COVID-19 Bias<b>") %>%
      hc_xAxis(title = list(text = '<b>Quarantine Period<b>',lineWidth = 3)) %>%
      hc_yAxis(title = list(text = '<b>Time Required to Insert One Puzzle Piece<b>')) %>%
      hc_legend(align = "right", verticalAlign = "top",
                layout = "vertical", x = 0, y = 100)