// Seeded PRNG so the heatmap is identical on every load (stable snapshots).
var __seed = 0x22b3d4e5
function rand() {
  __seed |= 0
  __seed = (__seed + 0x6d2b79f5) | 0
  var t = Math.imul(__seed ^ (__seed >>> 15), 1 | __seed)
  t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t
  return ((t ^ (t >>> 14)) >>> 0) / 4294967296
}

function generateData(count, yrange) {
  var i = 0
  var series = []
  while (i < count) {
    var x = (i + 1).toString()
    var y = Math.floor(rand() * (yrange.max - yrange.min + 1)) + yrange.min

    series.push({
      x: x,
      y: y,
    })
    i++
  }
  return series
}

var options = {
  series: [
    {
      name: 'Jan',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Feb',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Mar',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Apr',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'May',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Jun',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Jul',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Aug',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
    {
      name: 'Sep',
      data: generateData(20, {
        min: -30,
        max: 55,
      }),
    },
  ],
  chart: {
    height: 350,
    type: 'heatmap',
  },
  plotOptions: {
    heatmap: {
      shadeIntensity: 0.5,
      radius: 0,
      useFillColorAsStroke: true,
      colorScale: {
        ranges: [
          {
            from: -30,
            to: 5,
            name: 'Freezing',
            color: '#2E5CB8',
          },
          {
            from: 6,
            to: 20,
            name: 'Cold',
            color: '#4FC3F7',
          },
          {
            from: 21,
            to: 45,
            name: 'Mild',
            color: '#FFB200',
          },
          {
            from: 46,
            to: 55,
            name: 'Hot',
            color: '#E53935',
          },
        ],
        // Render the discrete ranges as a smooth gradient strip instead of the
        // categorical legend. Hovering a band highlights the cells in that range
        // and dims the rest; hovering a cell slides the arrow to its value.
        gradientLegend: {
          enabled: true,
          width: '80%',
          thickness: 10,
          showHoverValue: true,
        },
      },
    },
  },
  dataLabels: {
    enabled: false,
  },
  stroke: {
    width: 1,
  },
  title: {
    text: 'Daily Temperature by Month (°C)',
  },
  legend: {
    position: 'top',
  },
}

var chart = new ApexCharts(document.querySelector('#chart'), options)
chart.render()
Color Range - JavaScript Heatmap Charts | ApexCharts.js | ApexCharts.js