gpt4 book ai didi

zooming - d3.js 缩放 xScale/xAxis

转载 作者:行者123 更新时间:2023-12-01 00:01:29 25 4
gpt4 key购买 nike

我正在尝试创建一个允许缩放功能的简单图表,到目前为止我发现的示例手动生成轴和刻度:http://bl.ocks.org/1182434

然而,我使用的是内置轴对象,我不知道如何转换比例以使其工作 - 有什么想法吗?

var xScale = d3.scale.linear().
domain([0, 80]). // your data minimum and maximum
range([0, width]); // the pixels to map to, e.g., the width of the diagram.

var yScale = d3.scale.linear().
domain([100, 0]).
range([0, height]);

var xAxis = d3.svg.axis().orient("bottom").scale(xScale).ticks(10, d3.format(",d")),
yAxis = d3.svg.axis().orient("left").scale(yScale);


var chart = d3.select("#chart").append("svg")
.attr("class", "chart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.attr("pointer-events", "all")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(d3.behavior.zoom().on("zoom", redraw))
.append("g")

chart.append('svg:rect')
.attr('width', width)
.attr('height', height)
.attr('fill', 'white');

// x-axis
var xaxis = chart.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);

// y-axis
var yaxis = chart.append("g")
.attr("class", "y axis")
.call(yAxis);

// omitted code to draw the path, it's just a path object that uses a line and passes data to it

function redraw()
{
console.log("here", d3.event.translate, d3.event.scale);
path.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");

// d3.event.transform(xScale, yScale);
// HERE is where I need to figure out how to scale the x and y axes!

xAxis.scale(xScale);
yAxis.scale(yScale);

xaxis.call(xAxis);
yaxis.call(yAxis);
}

最佳答案

这就是我最终这样做的方式,以防有人感兴趣:

function redraw() 
{

console.log("here", d3.event.translate, d3.event.scale);
path.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");

var xoffset = (xMax + xMin) / 2;
var yoffset = (yMax + yMin) / 2;

var xTemp = [(0 - xoffset) * (1/d3.event.scale), (0 + xoffset) * (1/d3.event.scale)];
var yTemp = [(0 - yoffset) * (1/d3.event.scale), (0 + yoffset) * (1/d3.event.scale)];

xMin = xTemp[0] + xoffset;
xMax = xTemp[1] + xoffset;
yMin = yTemp[0] + yoffset;
yMax = yTemp[1] + yoffset;

console.log("", xMin, xMax, yMin, yMax);

xScale.domain([xMin, xMax]);
yScale.domain([yMax, yMin]);

xaxis.call(xAxis);
yaxis.call(yAxis);

path.attr("d", line)
.attr("transform", null)
.transition()
.ease("linear")
;
}

请注意,我还必须设置比例限制:

var chart = d3.select("#chart").append("svg")
.attr("class", "chart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.attr("pointer-events", "all")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(d3.behavior.zoom().scaleExtent([0.2, 5]).on("zoom", redraw))
.append("g");

关于zooming - d3.js 缩放 xScale/xAxis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com