【发布时间】:2021-06-14 08:19:27
【问题描述】:
我正在尝试在该确切时间点(x 轴)获取线值,但是相同的刻度给我不同的值取决于我悬停在哪一侧,如果它从左侧表示当前数据index[123]: 10586174,如果我从右侧悬停,它会在 index[124]: 10586174 处显示当前数据。这只是像素差异,因为线条笔划宽度只有 3px,但值不同。这是非常不一致的,一个刻度应该只返回一个与该日期相关的值。
//Set up interactions
d3.selectAll(".xAxis > .tick")
.style("color", "#65757E")
.on("mousemove", function (event) {
event.path[0].style.stroke = "#0D2633";
d3.select("line").style("z-index", 0);
const mousePosition = d3.pointer(event, svg.node()); // gets [x,y]
const currentDate = xScale.invert(mousePosition[0]); // converts x to current date
const bisect = d3.bisector((d) => new Date(d.date)); // create a bisector
const index_currentData = bisect.right(
lineChartData.values[0].dataset,
currentDate
);
if (index_currentData < lineChartData.values[0].dataset.length) {
console.log(
`Current data at index[${index_currentData}]: ${lineChartData.values[0].dataset[index_currentData].value}`
);
const comparisonDate = xScale2.invert(mousePosition[0]); // converts x to comparison date
const index_comparisonData = bisect.right(
comparisonData.values[0].dataset,
comparisonDate
);
if (index_comparisonData < comparisonData.values[0].dataset.length) {
const tooltipComparisonValue =
comparisonData.values[0].dataset[index_comparisonData].value;
}
})
【问题讨论】:
-
我建议你稍微重构一下你的代码:你绘制 x 和 y 轴 12 次,每个图有 4 行。重构后,您将更快地解决问题
-
谢谢你,你能把这个扩展12次吗?还尝试使用两个数据集的最小值和两个数据集的最大值来初始化 xScale,但没有运气。
-
每次调用 LineChart 都会附加一个 g: with const svg = d3.select(svgRef.current).append("g")
标签: javascript d3.js data-visualization linechart