Я пытаюсь динамически добавлять аннотации к моим высоким графикам в React. Я использую функцию addAnnotation
для добавления новой аннотации всякий раз, когда в моем приложении запускается событие hover, но аннотация не отображается. Я chart.annotations
отладчик в свой код, и когда я вызываю chart.annotations
я вижу, что в настоящее время существует массив аннотаций, но они не являются рендерингом. Я даже сделал вызов addPlotLine
в этой функции, и сюжетная линия отображается на диаграмме. Мой конфигурационный файл выглядит так:
chart: {
annotations: [{
labelOptions: {
backgroundColor: 'rgba(0, 0, 0, 0.5)',
verticalAlign: 'top',
align: 'right',
}
}],
annotationsOptions: {
},
.... some lots more config options
}
и моя функция зависания для добавления аннотации следующая:
if( isNumber(value) )
//this renders a plotline
chart.xAxis[0].addPlotLine(baseChartHandle.generateInteractivePlotLine(value));
// this doesn't render my annotation however
chart.addAnnotation({
linkedTo: value,
title: {
text: "It works!"
}
});
}
Я обнаружил, что когда я добавлял аннотации с использованием Highcharts, функция "linkedTo" никогда не работала, несмотря на мои испытания.
Несмотря на то, что я добавил, что руководство не смогло применить его. Я бы предложил в вашем случае добавить его по значению x и y, а затем найти точку таким образом. Вот как я успешно добавил аннотации в прошлом:
series.data.forEach(function (point) {
var annotationObject =
{
id: point.id,
labelOptions: {
y: 15,
verticalAlign: 'bottom',
distance: 25
},
labels: []
};
}
var text = <get text you want to push>;
annotationObject.labels.push(
{
point: {
xAxis: 0,
yAxis: 0,
x: point.x,
y: point.y
},
text: text
}
);
_chart.addAnnotation(annotationObject);
});
Я также обнаружил ошибку в HighCharts при использовании удаленных аннотаций в качестве хэдз-ап. Каждой точке нужен идентификатор, как указано выше, но он должен вызываться этой строкой:
_chart.removeAnnotation(id);
Он удалит аннотацию, однако вы получите много жалоб от высоких карт, если после этого вы попытаетесь что-то сделать, и он сломается. Я нашел ответ здесь, в annotations.js:
Красный ящик - это код, который я добавил. Если вы удалите ANnotation (ann.id), и это будет rerenders, он не сработает, потому что объект label имеет значение null. Добавление этой проверки позволяет сделать это без сбоя labelCollectors.
Счастливый график.
modules/annotations.js
)?require('highcharts/modules/annotations')(ReactHighcharts.Highcharts);
в файле