Показать всплывающую подсказку для невидимых серий в Highcharts
Я пытаюсь отобразить пользовательскую подсказку с помощью Highcharts. Здесь вы можете найти пример кода:
http://jsfiddle.net/jalbertbowdenii/fDNh9/188/
Когда вы наводите курсор на диаграмму, вы можете видеть, что всплывающая подсказка содержит только значения из серии 2, но не из серии 1 (которая невидима). Когда вы нажимаете "Серия 1" в легенде, вы можете увидеть значения из серии 1 во всплывающей подсказке.
РЕДАКТИРОВАТЬ: no code
, чтобы зафиксировать, просто фиксируя linkrot/придерживаясь правил редактирования...
Есть ли способ отобразить значения из невидимой серии во всплывающей подсказке?
Ответы
Ответ 1
tooltip: {
formatter: function() {
var s = '<b>'+ this.x +'</b>';
var chart = this.points[0].series.chart; //get the chart object
var categories = chart.xAxis[0].categories; //get the categories array
var index = 0;
while(this.x !== categories[index]){index++;} //compute the index of corr y value in each data arrays
$.each(chart.series, function(i, series) { //loop through series array
s += '<br/>'+ series.name +': ' +
series.data[index].y +'m'; //use index to get the y value
});
return s;
},
shared: true
}
Ответ 2
Форматирование всплывающей подсказки - это функция, подобная любой другой функции, поэтому, если вы просто делаете данные доступными, она может возвращать строку со значениями для всех серий. В этом примере я переместил серию массивов и категорий в отдельные переменные, а форматирование всплывающей подсказки использует индекс в этих массивах, чтобы найти значения.
formatter: function() {
var index = $.inArray(this.x, categories);
var s = '<b>'+ this.x +'</b>';
s += '<br/>'+ chart.series[0].name + ': ' + data1[index];
s += '<br/>'+ chart.series[1].name + ': ' + data2[index];
return s;
}
Ответ 3
Еще один способ сделать это - сделать некоторые атрибуты серии невидимыми, а не всю серию. Это позволит вам увидеть его в подсказке и легенде.
Вот что я сделал:
- Сначала я установил цвет линии невидимой серии на "прозрачный".
- Затем я установил цвет заливки для невидимых маркеров серии на "прозрачный".
- Наконец, я отключил состояние зависания для маркеров. Это предотвращает появление темных кругов подсветки при перемещении курсора мыши над каждой точкой видимой серии.
Здесь приведена измененная версия вашей оригинальной скрипки с этими изменениями: http://jsfiddle.net/brightmatrix/fDNh9/184/
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
lineColor: 'transparent', // make the line invisible
marker: {
fillColor: 'transparent', // make the line markers invisible
states: {
hover: {
enabled: false // prevent the highlight circle on hover
}
}
}
}, {
data: [216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5]
}]
Два примечания:
- Я использовал атрибут
enableMouseTracking: false
с другими невидимыми рядами, чтобы пользователи не взаимодействовали с ними (для достижения визуальных эффектов). Если вы установите это для своей невидимой серии, это предотвратит появление рядовых данных в вашей подсказке.
- Если вы хотите сохранить свою невидимую серию в легенде, вы можете добавить атрибут
showInLegend: false
. Его данные будут отображаться во всплывающей подсказке.
Я надеюсь, что это поможет другим, кто сталкивается с этим вопросом.
Ответ 4
Слишком поздно для ответа, но это то, что я сделал. Постройте график и сделайте цвет прозрачным. Построить его на противоположную ось y и установить max на ноль. Установите для alignTicks значение false. Что-то вроде этого.
chart: {
alignTicks: false,
type: 'line'
},
Тогда нужно только изменить значение цвета в форматировании tooltip, поскольку метка будет прозрачной.
Надеюсь, это поможет кому-то.
Счастливое обучение:)