Chart.js - 悬停标签以显示x轴上所有数据点的数据

Dan*_*Dan 6 chart.js

我有一个包含多个数据点/线的图表.目前,如果您将鼠标悬停在数据点附近,它将显示该点的标签/值.

我想要的是以下内容:当您将鼠标悬停在图表上的任何位置时,它将在单个标签中同时显示该x值处的所有数据点的标签+值.

例如,让我们采用给定的数据集:

Date (x-labels): ['Jan 01','Jan 02','Jan 03']
Apples Sold: [3,5,1]
Oranges Sold: [0,10,2]
Gallons of Milk Sold: [5,7,4]
Run Code Online (Sandbox Code Playgroud)

当您将鼠标悬停在图表中间的"Jan 02"垂直空间上方时,标签应显示:

Jan 02
-----------------------
Apples Sold: 5
Oranges Sold: 10
Gallons of Milk Sold: 7
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来实现这一目标?

谢谢.

bab*_*rao 17

有没有一种简单的方法来实现这一目标?

是的!! 有一种非常直接的方法来实现这一目标.如果您已阅读文档,您可以很容易地找到它.

总之,基本上你需要将设置提示方式,以index在您的图表选项,为了完成你想要的行为.

...
options: {
   tooltips: {
      mode: 'index'
   }
}
...
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望设置以下内容:

...
options: {
   tooltips: {
      mode: 'index',
      intersect: false
   },
   hover: {
      mode: 'index',
      intersect: false
   }
}
...
Run Code Online (Sandbox Code Playgroud)

这将使得当将图形上的任何位置悬停在最近的x值时,将发生所有预期的悬停/标签交互.

从文档:

#指数
相同的指数在查找项目.如果交叉设置为true,则使用第一个交叉项来确定数据中的索引.如果相交false,则使用x方向上最近的项目来确定索引.

这是一个工作示例:

var ctx = document.getElementById('canvas').getContext('2d');
var chart = new Chart(ctx, {
   type: 'line',
   data: {
      labels: ['Jan 01', 'Jan 02', 'Jan 03'],
      datasets: [{
         label: 'Apples Sold',
         data: [3, 5, 1],
         borderColor: 'rgba(255, 99, 132, 0.8)',
         fill: false
      }, {
         label: 'Oranges Sold',
         data: [0, 10, 2],
         borderColor: 'rgba(255, 206, 86, 0.8)',
         fill: false
      }, {
         label: 'Gallons of Milk Sold',
         data: [5, 7, 4],
         borderColor: 'rgba(54, 162, 235, 0.8)',
         fill: false
      }]
   },
   options: {
      tooltips: {
         mode: 'index',
         intersect: false
      },
      hover: {
         mode: 'index',
         intersect: false
      }
   }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="canvas"></canvas>
Run Code Online (Sandbox Code Playgroud)

  • 在3.3.2中,将“tooltips”放入“plugin”中,并将“tooltips”更改为“tooltip”。[文档](https://www.chartjs.org/docs/3.3.2/configuration/tooltip.html) 和示例:/sf/answers/4747900251/ (4认同)
  • @Dan - 编辑不是为了修复代码片段以改进答案中的书面代码,编辑通常是为了改进答案以提供更好的可读性(例如有人不知道如何在页面上正确格式化代码)。如果您有更好的代码片段,请自己回答问题而不是编辑。更好的编辑是替换尖刻且多余的答案“如果您阅读了文档,您可以很容易地找到这一点。” 类似“可以在此处找到文档”之类的内容。 (2认同)
  • 这在最新版本中不起作用,有什么想法吗? (2认同)

bus*_*oni 10

对于 Chart.js 3.3.2,您可以使用 @baburao 的方法并进行一些更改。你可以查看文档。普京。tooltip​ plugins例子:

...
options: {
    plugins: {
        tooltip: {
            mode: 'nearest',
            intersect: false
        }
    }
}
...
Run Code Online (Sandbox Code Playgroud)

  • 这是一个救星。这应该是新接受的答案。太感谢了。编辑:请注意,我无法让它与 mode: 'nearest' 一起使用,而是像原始答案一样使用 mode: 'index' 。但其余的都是金子。 (2认同)