Highcharts по умолчанию не поддерживает такого рода манипуляции с легендами.
Решением здесь может быть расширение ядра Highcharts , чтобы оно поддерживало 2 или более легенд.
Пример для 2 легенд:
(function(H) {
var merge = H.merge;
H.wrap(H.Legend.prototype, 'getAllItems', function() {
var allItems = [],
chart = this.chart,
options = this.options,
legendID = options.legendID;
H.each(chart.series, function(series) {
if (series) {
var seriesOptions = series.options;
// use points or series for the legend item depending on legendType
if (!isNaN(legendID) && (seriesOptions.legendID === legendID)) {
allItems = allItems.concat(
series.legendItems ||
(seriesOptions.legendType === 'point' ?
series.data :
series)
);
}
}
});
return allItems;
});
H.wrap(H.Chart.prototype, 'render', function(p) {
var chart = this,
chartOptions = chart.options;
chart.topLegend = new H.Legend(chart, merge(chartOptions.legend, chartOptions.topLegend, {
legendID: 0
}));
chart.bottomLegend = new H.Legend(chart, merge(chartOptions.legend, chartOptions.bottomLegend, {
legendID: 1
}));
p.call(this);
});
H.wrap(H.Chart.prototype, 'redraw', function(p, r, a) {
var chart = this;
p.call(chart, r, a);
chart.leftLegend.render();
chart.rightLegend.render();
});
H.wrap(H.Legend.prototype, 'positionItem', function(p, item) {
p.call(this, item);
});
})(Highcharts);
Демонстрационная версия: http://jsfiddle.net/BlackLabel/6ob2qs1c/
Легенды можно позиционировать через их свойства x
& y
. chart.marginBottom
создает пространство для легенд.