Amcharts 4,xychart,限制工具提示的数量并将信息合并到一个工具提示中

2023-12-02

我正在使用 amcharts 4 显示温度线。有时有很多站,所以我希望只有一个工具提示,并且只针对光标所在的值,而不是每一行都有一个工具提示(因为这样它们会重叠,有些是不可读的)。

multiple tooltips

并且可能有多个站具有相同的温度,因此我必须在工具提示中列出所有这些站。

有人知道如何实现这一目标吗?

在 amcharts 3 中,我使用附加到图表的气球函数来创建我自己的工具提示。但我还没有找到如何在 amcharts 4 中使用该系列。

谢谢你的提示!


正如 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;
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Amcharts 4,xychart,限制工具提示的数量并将信息合并到一个工具提示中 的相关文章

随机推荐