在下面的HighCharts
示例中,系列A
和B
具有相同的数据。只有B
的行在图表绘图区域中可见,因为它直接绘制在A
上。
最终用户无法知道A
落后于B
。
我们可以在配置对象中设置tooltip.shared = true
,以显示在任何系列上悬停时给定x轴点的所有数据值。但是,在我的现实例子中,我在图表上绘制了多达50个系列,这是不合适的。
是否可以保持tooltip.shared = false
的行为,但是当用户将鼠标悬停在该点与一个或多个系列重叠的系列上时,可以显示所有(且仅有)重叠系列值提示?或者是否有任何其他用户友好的方式来表明在给定的x值上有2个以上相同的y值?
http://jsfiddle.net/adamtsiopani/XbYZz/
$(function () {
$('#container').highcharts({
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
tooltip: {
valueSuffix: '°C'
},
series: [{
name: 'Tokyo',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}, {
name: 'New York',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
}, {
name: 'Berlin',
data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
}, {
name: 'London',
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}]
});
});
答案 0 :(得分:5)
Highcharts还没有解决方案。它们具有隐藏一个系列的功能,因此其他系列可见,这是一个很好的选择。但如果您需要在2系列重叠时获得共享工具提示,则可以按照下面的小提示进行操作。
$(function () {
var series1 = [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4];
var series2 = [24.9, 50.5, 106.4, 90.2, 80.0, 150.0, 160.6, 170.5, 160.4, 180.1, 95.6, 54.4];
$('#container').highcharts({
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
tooltip: {
formatter: function () {
var s1 = this.series.chart.series[0].processedYData[this.point.index];
var s2 = this.series.chart.series[1].processedYData[this.point.index];
if (s1 == s2) {
return '<b>' + this.series.chart.series[0].name + ' :' + s1 + '</b><br/><b>' + this.series.chart.series[1].name + ' :' + s2 + '</b><br/>in month : ' + this.x;
}
return '<b>' + this.series.name + ' :' + this.y + '</b><br/>in month : ' + this.x;
}
},
series: [{
data: series1
}, {
data: series2
}]
});
});
http://jsfiddle.net/Malinga/2jbdqe6x/7/
参考:http://www.malinga.me/highcharts-shared-tooltips-only-in-overlapping-points/#more-109
答案 1 :(得分:1)
除非精心制作复杂的解决办法,否则highcharts尚不支持。请参阅此帖(其中包含声称自己是高级工程师的用户的评论):
我猜你只需依靠使用图例的用户取消选择阻止另一个的系列。
答案 2 :(得分:0)
作为用户,我会很困惑地在图表上看到50个系列 - 这是可读的吗?好主意是使用单独的yAxis,或单独的窗格,但仍然是50系列..
但是,您可以采取一些解决方法。不要使用共享工具提示,但在工具提示格式化程序中,获取实际的x-index(例如var xIndex = series.xData.indexOf(this.x);
)然后遍历所有系列,从系列数据中获取值(例如var yValue = series.yData[xIndex];
)。现在与this.y
进行比较,如果值相似,请在返回的工具提示中添加更多点。