在一个图表上显示多个工具提示(气球)通常需要使用图表库或框架来实现。以下是一些常见的图表库和它们的实现方法:
使用 Chart.js
Chart.js 是一个流行的 JavaScript 图表库,支持自定义工具提示。
- 安装 Chart.js:
npm install chart.js
- 创建图表并自定义工具提示:
<!DOCTYPE html> <html> <head> <title>Chart.js Multiple Tooltips</title> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> </head> <body> <canvas id="myChart" width="400" height="400"></canvas> <script> const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'bar', data: { labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], datasets: [{ label: '# of Votes', data: [12, 19, 3, 5, 2, 3], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)', 'rgba(75, 192, 192, 0.2)', 'rgba(153, 102, 255, 0.2)', 'rgba(255, 159, 64, 0.2)' ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)', 'rgba(255, 159, 64, 1)' ], borderWidth: 1 }] }, options: { tooltips: { mode: 'index', intersect: false, callbacks: { label: function(tooltipItem, data) { const dataset = data.datasets[tooltipItem.datasetIndex]; const label = dataset.label || ''; const value = dataset.data[tooltipItem.index]; return `${label}: ${value}`; } } } } }); </script> </body> </html>
使用 Highcharts
Highcharts 是另一个强大的图表库,支持自定义工具提示。
- 安装 Highcharts:
npm install highcharts
- 创建图表并自定义工具提示:
<!DOCTYPE html> <html> <head> <title>Highcharts Multiple Tooltips</title> <script src="https://code.highcharts.com/highcharts.js"></script> </head> <body> <div id="container" style="width: 100%; height: 400px;"></div> <script> Highcharts.chart('container', { chart: { type: 'bar' }, title: { text: 'Multiple Tooltips Example' }, xAxis: { categories: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'] }, yAxis: { title: { text: 'Votes' } }, series: [{ name: '# of Votes', data: [12, 19, 3, 5, 2, 3] }], tooltip: { shared: true, formatter: function() { let s = '<b>' + this.x + '</b>'; Highcharts.each(this.points, function(point) { s += '<br/>' + point.series.name + ': ' + point.y; }); return s; } } }); </script> </body> </html>
使用 D3.js
D3.js 是一个非常灵活的 JavaScript 库,可以用来创建复杂的图表和自定义工具提示。
- 安装 D3.js:
npm install d3
- 创建图表并自定义工具提示:
<!DOCTYPE html> <html> <head> <title>D3.js Multiple Tooltips</title> <script src="https://d3js.org/d3.v7.min.js"></script> <style> .tooltip { position: absolute; text-align: center; width: 100px; height: 28px; padding: 2px; font: 12px sans-serif; background: lightsteelblue; border: 0px; border-radius: 8px; pointer-events: none; } </style> </head> <body> <div id="chart"></div> <script> const data = [ { name: 'Red', value: 12 }, { name: 'Blue', value: 19 }, { name: 'Yellow', value: 3 }, { name: 'Green', value: 5 }, { name: 'Purple', value: 2 }, { name: 'Orange', value: 3 } ]; const svg = d3.select('#chart') .append('svg') .attr('width', 400) .attr('height', 400); const bars = svg.selectAll('rect') .data(data) .enter() .append('rect') .attr('x', (d, i) => i * 50) .attr('y', d => 400 - d.value * 10) .attr('width', 40) .attr('height', d => d.value * 10) .attr('fill', 'steelblue'); const tooltip = d3.select('body') .append('div') .attr('class', 'tooltip') .style('opacity', 0); bars.on('mouseover', function(event, d) { tooltip.transition() .duration(200) .style('opacity', .9); tooltip.html(d.name + ': ' + d.value) .style('left', (event.pageX) + 'px') .style('top', (event.pageY - 28) + 'px'); }) .on('mouseout', function(d) { tooltip.transition() .duration(500) .style('opacity', 0); }); </script> </body> </html> </body> <html>
这些示例展示了如何在不同图表库中实现多个工具提示。根据你的需求选择合适的库并进行相应的调整。