【问题标题】:chart.js: Place tooltip for stacked bar charts on top of barchart.js:将堆叠条形图的工具提示放在条形顶部
【发布时间】:2019-10-03 14:48:54
【问题描述】:

当我在简单条形图中有条形时,工具提示会放在条形的顶部:

如果我将鼠标悬停在堆积条形图上,工具提示将放置在 average 位置:

我希望将工具提示始终放在堆叠条形图的顶部(就像简单条形图一样),而不是这种行为。 配置位置的唯一两个选项是averagenearest (https://www.chartjs.org/docs/latest/configuration/tooltip.html#position-modes)。

我知道上面提到的使用 Chart.Tooltip.positioners.custom 的方法,但一方面这会覆盖所有图表的行为(但我只需要它用于堆叠条形图),另一方面即使我可以使用我不知道如何获取或计算图表栏的顶部位置。

那么,有没有办法将工具提示放在堆叠条的顶部?谢谢!

【问题讨论】:

  • 你能解决这个问题吗?
  • @shrys 不幸的是没有。我可能需要在 GitHub 上填写问题。

标签: javascript charts chart.js


【解决方案1】:

感谢您的回复,我找到了一种方法,但它是一种 hack,可能不适合您。考虑以下几点:

//register custom positioner
Chart.Tooltip.positioners.custom = function(elements, position) {
  //debugger;
  return {
    x: position.x,
    y: elements[0]._view.base - (elements[0].height() + elements[1].height())
  }
}


//Individual chart config
var ctx = "myChart";
var myChart = new Chart(ctx, {
  type: 'bar',
  options: {
    title: {
      display: true,
      text: 'Precision-Recall Curve',
    },
    layout: {
      padding: 32
    },
    tooltips: {
      mode: 'index',
      intersect: true,
      position: 'custom',
      yAlign: 'bottom'
    },
    scales: {
      xAxes: [{
        stacked: true
      }],
      yAxes: [{
        stacked: true
      }]
    }
  },
  data: {
    labels: ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'],
    datasets: [{
      label: 'data1',
      data: [5, 56, 90, 6, 42, 67, 32, 24, 20, 18, 56],
      borderColor: '#1acc1c',
      backgroundColor: 'rgba(26, 10, 55, .1)',
      pointBorderColor: "#4Bd1C0",
      pointBackgroundColor: "#fff",
      pointHitRadius: 10
    }, {
      label: 'data2',
      data: [2, 12, 24, 30, 39, 58, 10, 82, 34, 89, 5],
      borderColor: '#34315a',
      backgroundColor: 'rgba(132, 2, 34, .7)',
      pointBorderColor: "#34495e",
      pointBackgroundColor: "#fff",
      pointHitRadius: 10
    }]
  }
});
<div class="container">
  <div>
    <canvas id="myChart"></canvas>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js"></script>

【讨论】:

  • 谢谢,这看起来不错!我将在下周测试它。那么,第 2 行中的这个调试器语句有什么作用吗?看来您的示例仅限于 2 个数据集,对(元素 [0] 和元素 [1])?但是相应地修改代码会很容易。
  • 是的debugger 无效,这也是一个受限示例,我使用mode: 'index' 获取所有数据集,否则它将是光标指向的一个数据集
  • 相关文档:chartjs.org/docs/latest/configuration/…。对于那些只需要将工具提示粘贴到顶部的人来说,代码要小得多。
猜你喜欢
  • 2020-09-14
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多