javascript ChartJS -移动垂直线显示在工具提示顶部

3lxsmp7m  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(88)

你好,我是
我已经按照这篇文章(Moving vertical line when hovering over the chart using chart.js)在我的图表上画了一条垂直线。
对于单个数据集,它工作得很好。
但对于多数据集显示(y轴上有堆叠选项),垂直线绘制在图表的工具提示上。
设置图表工具提示的z索引和垂直线都不能解决我的问题。因为我找不到合适的地方。
你有什么想法/建议来解决这个问题吗?
我使用react-chart-js 2和chart-js ^2.9.4作为对等依赖。

2nc8po8w

2nc8po8w1#

您可以使用自定义插件,在绘制所有数据集之后但在绘制工具提示之前进行绘制:

var options = {
  type: 'line',
  data: {
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [{
        label: '# of Votes',
        data: [12, 19, 3, 5, 2, 3],
        borderWidth: 1
      },
      {
        label: '# of Points',
        data: [7, 11, 5, 8, 3, 7],
        borderWidth: 1
      }
    ]
  },
  options: {
    scales: {
      yAxes: [{
        stacked: true
      }]
    },
    plugins: {
      customLine: {
        width: 5,
        color: 'pink'
      }
    }
  },
  plugins: [{
    id: 'customLine',
    afterDatasetsDraw: (chart, x, opts) => {
      const width = opts.width || 1;
      const color = opts.color || 'black'

      if (!chart.active || chart.active.length === 0) {
        return;
      }

      const {
        chartArea: {
          top,
          bottom
        }
      } = chart;
      const xValue = chart.active[0]._model.x

      ctx.lineWidth = width;
      ctx.strokeStyle = color;

      ctx.beginPath();
      ctx.moveTo(xValue, top);
      ctx.lineTo(xValue, bottom);
      ctx.stroke();
    }
  }]
}

var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
  <canvas id="chartJSContainer" width="600" height="400"></canvas>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js"></script>
</body>
jljoyd4f

jljoyd4f2#

你也可以用下面的代码

insert below code in plugin section

plugins: {
  verticalLine: {
    width: 2,
    color: 'red'
  }
}

plugins: [
  {
    id: 'verticalLine',
    afterEvent: (chart, args, pluginOptions) => {
      const width = pluginOptions.width || 1;
      const color = pluginOptions.color || 'black';
      const {
        ctx,
        chartArea: { top, bottom }
      } = chart;
      ctx.lineWidth = width;
      ctx.strokeStyle = color;
      ctx.beginPath();
      ctx.moveTo(chart.tooltip.caretX, top);
      ctx.lineTo(chart.tooltip.caretX, bottom);
      ctx.stroke();
    }
  }
]

相关问题