3D column
author(s):
Torstein Hønsi
HTML
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-3d.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<figure class="highcharts-figure">
<div id="container"></div>
<p class="highcharts-description">
Chart designed to highlight 3D column chart rendering options.
Move the sliders below to change the basic 3D settings for the chart.
3D column charts are generally harder to read than 2D charts, but provide
an interesting visual effect.
</p>
<div id="sliders">
<table>
<tr>
<td><label for="alpha">Alpha Angle</label></td>
<td><input id="alpha" type="range" min="0" max="45" value="15"/> <span id="alpha-value" class="value"></span></td>
</tr>
<tr>
<td><label for="beta">Beta Angle</label></td>
<td><input id="beta" type="range" min="-45" max="45" value="15"/> <span id="beta-value" class="value"></span></td>
</tr>
<tr>
<td><label for="depth">Depth</label></td>
<td><input id="depth" type="range" min="20" max="100" value="50"/> <span id="depth-value" class="value"></span></td>
</tr>
</table>
</div>
</figure>
CSS
body {
font-family:
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Helvetica,
Arial,
"Apple Color Emoji",
"Segoe UI Emoji",
"Segoe UI Symbol",
sans-serif;
background: var(--highcharts-background-color);
color: var(--highcharts-neutral-color-100);
}
#container {
height: 400px;
}
.highcharts-figure,
.highcharts-data-table table {
min-width: 310px;
max-width: 800px;
margin: 1em auto;
}
#sliders {
margin: 0.3rem 10px;
}
#sliders td input[type="range"] {
display: inline;
}
#sliders td {
padding-right: 1em;
white-space: nowrap;
}
.highcharts-description {
background: light-dark(#f2f6f2, #323232);
border-radius: 0 4px 4px 0;
border-left: 2px solid light-dark(#1d6aff, #fff);
font-size: 0.8rem;
font-style: italic;
padding: 8px 16px;
margin: 2em 10px 1em;
}
JavaScript
// Set up the chart
const chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'column',
options3d: {
enabled: true,
alpha: 15,
beta: 15,
depth: 50,
viewDistance: 25
}
},
xAxis: {
type: 'category'
},
yAxis: {
title: {
enabled: false
}
},
tooltip: {
headerFormat: '<b>{point.key}</b><br>',
pointFormat: 'Cars sold: {point.y}'
},
title: {
text: 'Sold passenger cars in Norway by brand, May 2024'
},
subtitle: {
text: 'Source: ' +
'<a href="https://ofv.no/registreringsstatistikk"' +
'target="_blank">OFV</a>'
},
legend: {
enabled: false
},
plotOptions: {
column: {
depth: 25
}
},
series: [{
data: [
['Toyota', 1795],
['Volkswagen', 1242],
['Volvo', 1074],
['Tesla', 832],
['Hyundai', 593],
['MG', 509],
['Skoda', 471],
['BMW', 442],
['Ford', 385],
['Nissan', 371]
],
colorByPoint: true
}]
});
function showValues() {
document.getElementById(
'alpha-value'
).innerHTML = chart.options.chart.options3d.alpha;
document.getElementById(
'beta-value'
).innerHTML = chart.options.chart.options3d.beta;
document.getElementById(
'depth-value'
).innerHTML = chart.options.chart.options3d.depth;
}
// Activate the sliders
document.querySelectorAll(
'#sliders input'
).forEach(input => input.addEventListener('input', e => {
chart.options.chart.options3d[e.target.id] = parseFloat(e.target.value);
showValues();
chart.redraw(false);
}));
showValues();