// Seeded PRNG so the heatmap is identical on every load (stable snapshots).
var __seed = 0x77081a3b
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 data = [
  {
    name: 'W1',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W2',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W3',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W4',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W5',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W6',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W7',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W8',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W9',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W10',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W11',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W12',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W13',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W14',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
  {
    name: 'W15',
    data: generateData(8, {
      min: 0,
      max: 90,
    }),
  },
]

data.reverse()

var colors = [
  '#F3B415',
  '#F27036',
  '#663F59',
  '#6A6E94',
  '#4E88B4',
  '#00A7C6',
  '#18D8D8',
  '#A9D794',
  '#46AF78',
  '#A93F55',
  '#8C5E58',
  '#2176FF',
  '#33A1FD',
  '#7A918D',
  '#BAFF29',
]

colors.reverse()

var options = {
  series: data,
  chart: {
    height: 450,
    type: 'heatmap',
  },
  dataLabels: {
    enabled: false,
  },
  colors: colors,
  xaxis: {
    type: 'category',
    categories: [
      '10:00',
      '10:30',
      '11:00',
      '11:30',
      '12:00',
      '12:30',
      '13:00',
      '13:30',
    ],
  },
  title: {
    text: 'Room Occupancy by Week & Time (per-row colors)',
  },
  grid: {
    padding: {
      right: 20,
    },
  },
}

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