I'm trying to make a genealogic timeline with jquery.flot. I want to display the right label when i'm hovering a point, i.e. when i'm hovering the marriage point of a person, the label "marriage - marriage date" appears. But visibly, i'm not able to build an array of labels as it's possible to do that for data.
Just a bit of the code :
<div id="placeholder" style="width:800px;height:300px"></div> <script language="javascript" type="text/javascript"> $(function () { var data = [ { label: [["Birth Pierre MARTIN (1756)"], ["Marriage Pierre MARTIN (1781)"], ["Death Pierre MARTIN (1812)"]], data: [[1756, 20.0], [1781, 20.0], [1812, 20.0]] }, { label: [["Birth Marie DUPONT (1761)"], ["Marriage Marie DUPONT (1781)"], ["Death Marie DUPONT (1833)"]], data: [[1761, 19.0], [1781, 19.0], [1833, 19.0]] }, { label: [["Birth Charles MARTIN (1782)"], ["Marriage Charles MARTIN (1810)"], ["Death Charles MARTIN (1855)"]], data: [[1782, 18.0], [1810, 18.0], [1855, 18.0]] }, { label: [["Birth Catherine MARTIN (1790)"], ["Marriage Catherine MARTIN (1810)"], ["Death Catherine MARTIN (1868)"]], data: [[1790, 17.0], [1810, 17.0], [1868, 17.0]] }, { label: [["Birth Louis MARTIN (1813)"], ["Death Louis MARTIN (1876)"]], data: [[1813, 16.0], [1876, 16.0]] } ]; var options = { series: { lines: { show: true, lineWidth: 5}, points: { show: true, radius: 4 } }, legend: { show: false }, xaxis: { min:1745, max:1885, tickDecimals: 0, ticks: [[1750, "1750"], [1760, "1760"], [1770, "1770"], [1780, "1780"], [1790, "1790"], [1800, "1800"], [1810, "1810"], [1820, "1820"], [1830, "1830"], [1840, "1840"], [1850, "1850"], [1860, "1860"], [1870, "1870"], [1880, "1880"]] }, yaxis: { show: true, color:null, min:14, max:22, ticks: [[20, "Pierre MARTIN (1756-1812)"], [19, "Marie DUPONT (1761-1833)"], [18, "Charles MARTIN (1782-1855)"], [17, "Catherine MARTIN (1790-1868)"], [16, "Louis MARTIN (1813-1876)"]] }, selection: { mode: "x" }, grid: { borderWidth: 2, clickable: true, hoverable: true, autoHighlight: true }}; var placeholder = $("#placeholder"); placeholder.bind("plotselected", function (event, ranges) { $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1)); var zoom = $("#zoom").attr("checked"); if (zoom) plot = $.plot(placeholder, data, $.extend(true, {}, options, { xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to } })); }); placeholder.bind("plotunselected", function (event) { $("#selection").text(""); }); var plot = $.plot(placeholder, data, options); $("#clearSelection").click(function () { plot.clearSelection(); }); function showTooltip(x, y, contents) { $('' + contents + '').css( { position: 'absolute', display: 'none', top: y + 5, left: x + 5, border: '1px solid #fdd', padding: '2px', 'background-color': '#eef', opacity: 0.80 }).appendTo("body").fadeIn(20); } var previousPoint = null; $("#placeholder").bind("plothover", function (event, pos, item) { $("#x").text(pos.x.toFixed(2)); $("#y").text(pos.y.toFixed(2)); if (item) { if (previousPoint != item.datapoint) { previousPoint = item.datapoint; $("#tooltip").remove(); var x = item.datapoint[0].toFixed(2), y = item.datapoint[1].toFixed(2); showTooltip(item.pageX, item.pageY, item.series.label); } } else { $("#tooltip").remove(); previousPoint = null; } }); }); </script>
When I hover on the marriage point of the graph, instead of displaying :
"Marriage Pierre MARTIN (1781)",
I get the entire array :
"Birth Pierre MARTIN (1756) Marriage Pierre MARTIN (1781) Death Pierre MARTIN (1812)".
You can see my example here, to be more explainful (you can grab the code):
Is there a way to use one label per point on the graph ?
Notice that I changed this:
For this: