Human Workforce in Vue
Using ApexCharts with Vue
This Human Workforce example wires ApexCharts into Vue through the vue3-apexcharts component.
Install it with npm install vue3-apexcharts apexcharts, then mount the chart with <apexchart type="..." :options="options" :series="series" />.
<template>
<div>
<div class="wrap">
<h1>820 people, and the crowd is the person</h1>
<p>
One dot per employee, coloured by department. The figure is a custom
unit layout: the outline is scanned row by row and each row is filled
with as many dots as fit, so the head, arms and legs come out of the
shape itself rather than from hand-placed coordinates.
</p>
<div class="chart-wrap">
<div id="chart">
<apexchart
type="unit"
height="470"
:options="chartOptions"
:series="series"
></apexchart>
</div>
</div>
<p class="note">1 dot = 1 employee</p>
</div>
</div>
</template>
<script>
import VueApexCharts from 'vue-apexcharts'
// This demo also loads: https://cdn.jsdelivr.net/npm/apexcharts/dist/unit-shapes.js
export default {
components: {
apexchart: VueApexCharts,
},
data: function () {
return {
series: [576, 168, 42, 34],
chartOptions: {
chart: {
type: 'unit',
height: 470,
animations: {
enabled: true,
speed: 900,
},
},
labels: ['Engineering', 'Sales', 'Marketing', 'Operations'],
colors: ['#1565C0', '#00B8A9', '#F2994A', '#7B8794'],
plotOptions: {
unit: {
layout: 'custom',
// One of the shapes in apexcharts/unit-shapes.
positions: 'human',
transition: 'flow',
clusterLabels: {
external: {
show: true,
},
},
},
},
legend: {
show: false,
},
},
}
},
}
</script>
<style>
body {
font-family:
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #fafbfc;
color: #2c3e50;
margin: 0;
padding: 32px 16px;
}
.wrap {
max-width: 720px;
margin: 0 auto;
}
h1 {
font-size: 22px;
margin: 0 0 8px;
}
p {
color: #5b6b78;
line-height: 1.5;
margin: 0 0 24px;
}
.chart-wrap {
background: #fff;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
}
.note {
color: #8592a0;
font-size: 12px;
text-align: center;
margin: 16px 0 0;
}
</style>