Табличка с разбивкой по флоку и отображение значений штрихов на мыши
Я пытаюсь понять функциональность всплывающей подсказки Flot, но на самом деле не обнимаю ее!
Я пытаюсь получить всплывающую подсказку, которая отображает метку и значение каждого раздела сложной гистограммы
Кто-нибудь сможет указать мне на пример этого или предоставить код для этого?
Ответы
Ответ 1
Следующий код работает для моей гистограммы на флопе, основанной на примере Flot, который показывает зависание точки данных. Хитрость заключается в том, что значения "item" в суммированной диаграмме являются кумулятивными, поэтому значение "y", отображаемое в подсказке инструмента, должно сначала вычесть значение точки привязки для баров под ним.
var previousPoint = null;
$("#chart").bind("plothover", function (event, pos, item) {
if (item) {
if (previousPoint != item.datapoint) {
previousPoint = item.datapoint;
$("#tooltip").remove();
var x = item.datapoint[0],
y = item.datapoint[1] - item.datapoint[2];
showTooltip(item.pageX, item.pageY, y + " " + item.series.label);
}
}
else {
$("#tooltip").remove();
previousPoint = null;
}
});
Я не нашел это в документации Flot, но массив item.datapoint
, казалось, содержал то, что мне нужно на практике.
Ответ 2
Приведенный выше код вызвал проблемы с перерисованием.
Вот улучшенный код:
var previousPoint = [0,0,0];
$("#regionsChart").bind("plothover", function (event, pos, item) {
if (item) {
if (previousPoint[0] != item.datapoint[0]
|| previousPoint[1] != item.datapoint[1]
|| previousPoint[2] != item.datapoint[2]
) {
previousPoint = item.datapoint;
$("#tooltip").remove();
var x = item.datapoint[0],
y = item.datapoint[1] - item.datapoint[2];
showTooltip(item.pageX, item.pageY, item.series.label + " " + y.toFixed(0) );
}
}
else {
$("#tooltip").remove();
previousPoint = [0,0,0];
}
});
Ответ 3
Это то же самое, что и Томас, за исключением того, что я переместил всплывающую подсказку, чтобы предотвратить ее блокировку.
var previousPoint = [0,0,0];
$("#regionsChart").bind("plothover", function (event, pos, item) {
if (item) {
if (previousPoint[0] != item.datapoint[0]
|| previousPoint[1] != item.datapoint[1]
|| previousPoint[2] != item.datapoint[2]
) {
previousPoint = item.datapoint;
$("#tooltip").remove();
var x = item.datapoint[0],
y = item.datapoint[1] - item.datapoint[2];
showTooltip(item.pageX, item.pageY - 35, item.series.label + " " + y.toFixed(0) );
}
}
else {
$("#tooltip").remove();
previousPoint = [0,0,0];
}
});
Ответ 4
В решении используется метод tooltipOpts → content с функцией обратного вызова для правильного возврата динамических данных на метку.
Я понял, что передача 4-го аргумента функции обратного вызова из "tooltipOpts" фактически дает вам весь объект данных, из которого построена диаграмма/график.
Отсюда вы можете легко извлечь метки оси X, используя второй аргумент той же функции, что и индекс метки для извлечения.
Пример:
Объект данных Я передаю функцию графика:
[
{ data: [[1,137],[2,194],[3,376],[4,145],[5,145],[6,145],[7,146]] }
],
{
bars: { show: true, fill: true, barWidth: 0.3, lineWidth: 1, fillColor: { colors: [{ opacity: 0.8 }, { opacity: 1}] }, align: 'center' },
colors: ['#fcc100'],
series: { shadowSize: 3 },
xaxis: {
show: true,
font: { color: '#ccc' },
position: 'bottom',
ticks: [[1,'Thursday'],[2,'Friday'],[3,'Saturday'],[4,'Sunday'],[5,'Monday'],[6,'Tuesday'],[7,'Wednesday']]
},
yaxis:{ show: true, font: { color: '#ccc' }},
grid: { hoverable: true, clickable: true, borderWidth: 0, color: 'rgba(120,120,120,0.5)' },
tooltip: true,
tooltipOpts: {
content: function(data, x, y, dataObject) {
var XdataIndex = dataObject.dataIndex;
var XdataLabel = dataObject.series.xaxis.ticks[XdataIndex].label;
return y + ' stories created about your page on ' + XdataLabel
},
defaultTheme: false,
shifts: { x: 0, y: -40 }
}
}
Гистограмма, отображаемая из вышеуказанного объекта данных:
![введите описание изображения здесь]()
Как вы можете видеть при просмотре изображения, логика, используемая для визуализации содержимого ярлыка, динамически формирует фактические данные:
tooltipOpts: {
content: function(data, x, y, dataObject) {
var XdataIndex = dataObject.dataIndex;
var XdataLabel = dataObject.series.xaxis.ticks[XdataIndex].label;
return y + ' stories created about your page on ' + XdataLabel;
},
defaultTheme: false,
shifts: { x: 0, y: -40 }
}