[英]Scrollable x-axis (scale point) on line-chart d3js v5
我试图在 d3js 中使缩放点 X 轴可滚动。
由于某种原因,我无法完成这项工作。 我想要实现的是:
var data = [
{xValue: "test", yValue: 10},
{xValue: "test1", yValue: 20},
{xValue: "test3", yValue: 10},
{xValue: "test4", yValue: 25},
{xValue: "test5", yValue: 18},
];
var maxYValue = Math.max(...data.map(o => +o.yValue), 0);
var margin = { top: 20, right: 8, bottom: 20, left: 35 };
var width = document.getElementById("chart").clientWidth;
var height = document.getElementById("chart").clientHeight;
var xScale = d3
.scalePoint()
.domain( data.map(({ xValue }) => {
return xValue;
}))
.range([0, width])
.padding([0.5]);
var yScale = d3
.scaleLinear()
.domain([0, maxYValue])
.range([height, 0]);
var svg = d3
.select("#chart")
.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr(
"transform",
"translate(" + margin.left + ", " + margin.top + ")"
)
.call(
d3.zoom().on("zoom", () => {
console.log("how to implement this?");
_svg.attr("transform", d3.event.transform);
})
);
var line = d3
.line()
.x(d => {
return xScale(d.xValue);
})
.y(d => yScale(+d.yValue))
.curve(d3.curveMonotoneX);
// Ticks for axisBottom is not working
var xAxis = d3.axisBottom(xScale).ticks(2);
var yAxis = d3.axisLeft(yScale);
// Append x-Axis
svg
.append("g")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.attr("class", "x-axis");
// Y-Axis
svg.append("g").call(yAxis);
// Append line
svg
.append("path")
.datum(data)
.attr("d", line(data))
.attr("fill", "none")
.attr("stroke", "#aaa")
.attr("stroke-width", 3);
https://jsfiddle.net/mojpgyux/3/
如果有更多经验的人可以帮助我,那就太好了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.