我正在尝试使用react-chartjs-2创建一个折线图,当将鼠标悬停在图表中的数据点上时,该折线具有垂直线。如下图所示:
我尝试使用chartjs-plugin-annotation插件,但结果不一。我设法创建了一条静态线,不了解它的工作方式或原因。我应该如何实现呢?我在上东西吗?
const data = {
labels: [...week(d)],
datasets: [
{
...
data: [10000, 9500, 7000, 4500, 2500, 1500, 500, 0],
}
]
};
var line = [{
type: "line",
mode: "vertical",
// ???
scaleID: "y-axis-0",
value: -20000,
borderColor: "#2984c5",
borderWidth: 1,
}];
const options = {
tooltips: {
xPadding: 20,
yPadding: 10,
displayColors: false,
bodyFontSize: 16,
bodyFontStyle: 'bold',
},
annotation: {
annotations: line,
},
scales: {
yAxes: [{
gridLines: {
drawBorder: false,
tickMarkLength: 0,
},
ticks: {
fontSize: 14,
padding: 15,
max: data.maxY,
min: 0,
maxTicksLimit: 6,
fontColor: "#485465"
}
}],
xAxes: [{
ticks: {
padding: 5,
fontSize: 14,
fontColor: "#485465",
},
gridLines: {
display: false,
},
},
],
},
responsive: false,
}
我在这里有完整的代码:https://codesandbox.io/s/y28mk3rn4z
答案 0 :(得分:1)
以下答案是正确的,只需要进行一些调整,谢谢 Jordan。
Chart.pluginService.register({
afterDraw: function(chart, easing) {
if (chart.tooltip._active && chart.tooltip._active.length) {
const activePoint = chart.controller.tooltip._active[0];
const ctx = chart.ctx;
const x = activePoint.tooltipPosition().x;
const topY = chart.scales['y-axis-0'].top;
const bottomY = chart.scales['y-axis-0'].bottom;
ctx.save();
ctx.beginPath();
ctx.moveTo(x, topY);
ctx.lineTo(x, bottomY);
ctx.lineWidth = 2;
ctx.strokeStyle = '#e23fa9';
ctx.stroke();
ctx.restore();
}
}
});
在图表选项中,我们需要添加以下配置以通过悬停在附近显示线。
tooltips: {
mode: 'index',
intersect: false
},
hover: {
mode: 'index',
intersect: false
}
PS:如果有多个图表绘制在一起,那么代码的和平可能会导致问题。如果我们想对特定图表(例如线)产生这种影响,那么我们可以添加以下条件。
if (
chart.tooltip._active &&
chart.tooltip._active.length &&
chart.config.type === 'line'
)
这对我有用,希望能有所帮助。
答案 1 :(得分:0)
只要仔细研究一下这件事,就会带您到那里!它不会在线条的两边进行填充,但是会创建垂直线!
componentWillMount() {
Chart.pluginService.register({
afterDraw: function (chart, easing) {
if (chart.tooltip._active && chart.tooltip._active.length) {
const activePoint = chart.controller.tooltip._active[0];
const ctx = chart.ctx;
const x = activePoint.tooltipPosition().x;
const topY = chart.scales['y-axis-1'].top;
const bottomY = chart.scales['y-axis-1'].bottom;
ctx.save();
ctx.beginPath();
ctx.moveTo(x, topY);
ctx.lineTo(x, bottomY);
ctx.lineWidth = 2;
ctx.strokeStyle = '#e23fa9';
ctx.stroke();
ctx.restore();
}
}
});
}
对于具有多个数据集的任何人,您也可以一次将其添加到所有行的工具提示选项中。
tooltips: {
mode: 'x'
},