Type 'number[]' has no properties in common with type 'XrangePointOptionsObject' in Angular8 using Highcharts

Viewed 12667

I am trying to add a Heatmap using highcharts in Angular8 however the typescript shows the following error

"Type 'number[]' has no properties in common with type 'XrangePointOptionsObject'."

So i know that the error comes from the part series.data, when i comment out the data arrays the page loads with empty fields on the heatmap. I have developed similar charts using javascript before but this is the first time i am using typescript to create a chart. The Highchart options for this heatmap are basically from here - https://www.tutorialspoint.com/angular_highcharts/angular_highcharts_heat_map.htm

This is the .ts file for the heatmap :

import { Component, OnInit } from '@angular/core';
import * as Highcharts from 'highcharts';
import * as highchartsHeatmap from 'highcharts/modules/heatmap';
import HeatmapModule from 'highcharts/modules/heatmap';
HeatmapModule(Highcharts);

@Component({
  selector: 'app-heatmap',
  template: '<div id="container"style="height: 400px; min-width: 380px"></div>',
})

export class HeatMapComponent implements OnInit {

  chartObject: Highcharts.Chart = null;
  constructor() {

  }

  ngOnInit() {
    this.chartObject = Highcharts.chart(

      {
        chart: {
          renderTo:"container",
          type: 'heatmap',
          marginTop: 40,
          marginBottom: 80
        },
        title: {
          text: 'Sales per employee per weekday'
        },
        xAxis: {
          categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas',
            'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
        },
        yAxis: {
          categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
          title: null
        },
        colorAxis: {
          min: 0,
          minColor: '#FFFFFF',
          maxColor: Highcharts.getOptions().colors[0]
        },
        legend: {
          align: 'right',
          layout: 'vertical',
          margin: 0,
          verticalAlign: 'top',
          y: 25,
          symbolHeight: 280
        },
        tooltip: {
          formatter: function () {
            return '<b>' + this.series.xAxis.categories[this.point.x] +
              '</b> sold <br><b>' +
              this.point.value +
              '</b> items on <br><b>' +
              this.series.yAxis.categories[this.point.y] + '</b>';
          }
        },
        series: [{
          name: 'sales per employee',
          borderwidth: 1,
          data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67],
          [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48],
          [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52],
          [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16],
          [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115],
          [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120],
          [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96],
          [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30],
          [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84],
          [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]],

          datalabels: {
            enabled: true,
            color: '#000000'
          }
        }]

      }



    );
  }

}

What is the correct way to insert chart options using typescript for creating a chart and avoiding similar errors? Best regards!

5 Answers

in the attribute "series", you need to add the type like this :

series: [
        {type: undefined,
        name: 'name I',
        data:[1,2,3]},
       {type: undefined,
        name: 'name II',
        data:[4,5,6]}],

So i managed to fix the error myself. In case anyone is having the same error use the following code :

import { Component, OnInit } from '@angular/core';
import * as Highcharts from 'highcharts';
import HeatmapModule from 'highcharts/modules/heatmap';
HeatmapModule(Highcharts);

@Component({
  selector: 'app-heatmap',
  template: '<div id="heatmap-object"style="height: 400px; min-width: 380px"></div>',
})

export class HeatMapComponent implements OnInit {


  HeatmapObject: Highcharts.Chart = null;
  constructor() { }

  ngOnInit() {
    let options = this.HeatmapOptions();
    this.HeatmapObject = Highcharts.chart(options);
  }

  HeatmapOptions(): Highcharts.Options {

    let options: Highcharts.Options = {

      chart: {
        renderTo: 'heatmap-object',
        marginTop: 40,
        marginBottom: 80,
        plotBorderWidth: 1
      },
      title: {
        text: 'Sales per employee per weekday'
      },
      xAxis: {
        categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
      },
      yAxis: {
        categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
        title: null
      },
      colorAxis: {
        min: 0,
        minColor: '#FFFFFF',
        maxColor: Highcharts.getOptions().colors[0]
      },
      legend: {
        align: 'right',
        layout: 'vertical',
        margin: 0,
        verticalAlign: 'top',
        y: 25,
        symbolHeight: 280
      },
      tooltip: {
        formatter: function () {
          return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' +
            this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
        }
      },
      series: [{
        type: 'heatmap',
        name: 'Sales per employee',
        borderWidth: 1,
        data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67], [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48], [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52], [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16], [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115], [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120], [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96], [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30], [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84], [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]],
        dataLabels: {
          enabled: true,
          color: '#000000'
        }
      }]

    }

    return options;
  }

}

Just specify series.type in series object.

These are the series options highchart provides.

Highcharts supports a long list of different chart types like line , spline , area , areaspline , column , bar , pie , scatter , gauge , arearange , areasplinerange and columnrange.

 series: [
  {
     name: 'Tokyo',
     type:'column',
     data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2,26.5, 23.3, 18.3, 13.9, 9.6]
  },
  {
     name: 'New York',
     type:'column',
     data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8,24.1, 20.1, 14.1, 8.6, 2.5]
  },
  {
     name: 'Berlin',
     type:'column',
     data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
  },
  {
     name: 'London',
     type:'column',
     data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
  }
 ]

You have to add type property in the object of data series array.

For Example,

series: [{
      type: 'column', // this is the solution
      name: 'Tokyo',
      data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    },
    {
      type: 'column', // this is the solution
      name: 'New York',
      data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]
    }]
Related