正如 David Liang 提到的,由于所有数据项都沿着其 x 轴值(在本例中为日期时间)收敛,因此您可以通过仅设置一个系列来将工具提示限制为一个tooltipText
,并且它将可以通过访问其余的数据字段数据占位符。例如。虽然series1
's value
场是E852_t4m
,它可以使用series30
的值只需放入"{median_tBel}"
.
但是,如果您希望根据鼠标悬停在哪一行上获得工具提示,则如何做到这一点取决于您是否需要图表光标。
如果不需要,只需设置tooltipText
在线的项目符号上,例如
series1.bullets.getIndex(0).tooltipText = "{name} {valueY}°C";
这是一个演示你的小提琴接着就,随即:
https://codepen.io/team/amcharts/pen/803515896cf9df42310ecb7d8d7a2fb7
但如果您需要图表光标,遗憾的是目前没有支持的选项。有一种解决方法,但这不是最好的体验。您从执行上述操作开始。图表光标将触发所有线条及其项目符号的悬停效果,包括触发其工具提示。项目符号的工具提示实际上是它的系列'(series1.bulletsContainer.children.getIndex(0).tooltip === series1.tooltip
)。如果我们删除对项目符号工具提示的引用,例如series1.bullets.getIndex(0).tooltip = undefined;
,图表将检查链条并引用系列。如果我们对这个系列做同样的事情'tooltip
,它会沿着链条上升到chart.tooltip
,如果我们对所有系列都这样做,我们基本上会变成chart.tooltip
变成某种单例行为。但它对鼠标悬停的响应不那么灵敏。
您将通过这个演示明白我的意思:
https://codepen.io/team/amcharts/pen/244ced223fe647ad6df889836da695a8
哦,同样在上面,您必须调整图表的工具提示以显示在项目符号的左侧/右侧:
chart.tooltip.pointerOrientation = "horizontal";
Edit:
由于第一种方法足够了,我更新了它与adapter检查范围内的其他字段。在适配器中,target
将是CircleBullet
, target.dataItem.valueY
是当前悬停的值,并且target.dataItem.dataContext
是同一日期的其他字段。
我是这样修改的tooltipText
显示当前悬停项目符号 +/-0.5C 范围内的其他系列:
// Provide a range of values for determining what you'll consider to be an "overlap"
// (instead of checking neighboring x/y coords.)
function inRange(valueA, rangeA, rangeB) {
return valueA >= rangeA && valueA <= rangeB;
}
// Provide adapters for tooltipText so we can modify them on the fly
chart.series.each(function(series) {
series.bullets
.getIndex(0)
.adapter.add("tooltipText", function(tooltipText, target) {
// the other data fields will already match on the date/x axis, so skip
// the date and this bullet's data fields.
// (target.dataItem.component is the target's series.)
var skipFields = ["date", target.dataItem.component.dataFields.valueY];
// this bullet's value
var hoveredValue = target.dataItem.valueY;
// all the other data fields at this date
var data = target.dataItem.dataContext;
// flag for adding additional text before listing other nearby bullet values
var otherPoints = false;
Object.keys(target.dataItem.dataContext).forEach(function(field) {
// if the field is neither date, nor bullet's
if (!~skipFields.indexOf(field)) {
if (inRange(data[field], hoveredValue - 0.5, hoveredValue + 0.5)) {
if (!otherPoints) {
tooltipText += "\n\nOthers:";
otherPoints = true;
}
// Keep {data placeholder} notation to retain chart formatting features
tooltipText += "\n" + field + ": {" + field + "}°C";
}
}
});
return tooltipText;
});
});