Highcharts - график bar с группировкой
Мне нужно создать график bar с группировкой. Я сумел создать вот такой график:
// First, let's make the colors transparent
Highcharts.setOptions({
colors: Highcharts.getOptions().colors.map(function (color) {
return Highcharts.color(color)
.setOpacity(0.5)
.get('rgba');
})
});
Highcharts.chart('container', {
chart: {
type: 'bar'
},
title: {
text: 'Monthly Average Rainfall'
},
subtitle: {
text: 'Source: WorldClimate.com'
},
xAxis: {
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
]
},
yAxis: {
min: 0,
title: {
text: 'Rainfall (mm)'
}
},
legend: {
enabled: false,
layout: 'vertical',
backgroundColor: '#FFFFFF',
align: 'left',
verticalAlign: 'top',
x: 100,
y: 70,
floating: true,
shadow: true
},
tooltip: {
shared: true,
valueSuffix: ' mm'
},
plotOptions: {
bar: {
grouping: false,
shadow: false
}
},
series: [{
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
],
pointPadding: 0
}, {
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
],
pointPadding: 0.1
}, {
name: 'London',
data: [
48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3,
51.2
],
pointPadding: 0.2
}, {
name: 'Berlin',
data: [
42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8,
51.1
],
pointPadding: 0.3
}]
});
#container {
min-width: 400px;
height: 400px;
margin: 0 auto;
}
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
Однако мне нужно, чтобы для каждого месяца соответствовало несколько линий графика, как в этом примере:

Можно ли реализовать такое в highcharts?
Ответы (1 шт):
Вам надо настраивать параметры plotOptions.bar (поскольку у вас горизонтальная диаграмма; если бы она была вертикальная, настраивать надо было бы те же самые параметры plotOptions.column). В данном случае вам надо включить группировку значений в рамках одной категории plotOptions.bar.grouping (которая по умолчанию как раз включена, но в вашем примере она принудительно выключена установкой параметра plotOptions.bar.grouping: false). Ещё несколько опций, которые вы возможно захотите подкрутить - это plotOptions.bar.pointWidth (ширина полоски), plotOptions.bar.pointPadding (который сейчас у вас установлен индивидуально для каждой отдельной серии значений - это сделано как раз для того, чтобы линии "красиво" рисовались одна поверх другой), и plotOptions.bar.groupPadding, а так же сам размер диаграммы:
// First, let's make the colors transparent
Highcharts.setOptions({
colors: Highcharts.getOptions().colors.map(function (color) {
return Highcharts.color(color)
.setOpacity(0.5)
.get('rgba');
})
});
Highcharts.chart('container', {
chart: {
type: 'bar'
},
title: {
text: 'Monthly Average Rainfall'
},
subtitle: {
text: 'Source: WorldClimate.com'
},
xAxis: {
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
]
},
yAxis: {
min: 0,
title: {
text: 'Rainfall (mm)'
}
},
legend: {
enabled: false,
layout: 'vertical',
backgroundColor: '#FFFFFF',
align: 'left',
verticalAlign: 'top',
x: 100,
y: 70,
floating: true,
shadow: true
},
tooltip: {
shared: true,
valueSuffix: ' mm'
},
plotOptions: {
bar: {
pointWidth: 8,
pointPadding: false,
groupPadding: 0.1,
shadow: false
}
},
series: [{
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
]
}, {
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
]
}, {
name: 'London',
data: [
48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3,
51.2
]
}, {
name: 'Berlin',
data: [
42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8,
51.1
]
}]
});
#container {
min-width: 400px;
height: 800px;
margin: 0 auto;
}
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
Результат:

