gpt4 book ai didi

plot - d3.js 缩放/拖动散点图

转载 作者:行者123 更新时间:2023-12-04 15:01:02 24 4
gpt4 key购买 nike

我正在处理 d3.js 散点图,我希望它可以在不调整点大小的情况下进行缩放。我基于 http://static.cybercommons.org/js/d3/examples/zoom-pan/zoom-pan.html它具有可缩放的网格线,但到目前为止,我也无法获得要缩放的点。当我缩放/平移时,每个点都会返回以下控制台警报:

Unexpected value translate(NaN,0) parsing transform attribute.



你可以在这里看到完整的内容,下面是设计的截图(点击“在新窗口中打开”查看整个内容):
http://bl.ocks.org/242dcfc83d98743d8589

JS的简化版本在这里:
d3.csv("js/AllOccupations.csv", function(data) {

var margin = {top: 30, right: 10, bottom: 50, left: 60},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;

var xMax = d3.max(data, function(d) { return +d.TotalEmployed2011; }),
xMin = 0,
yMax = d3.max(data, function(d) { return +d.MedianSalary2011; }),
yMin = 0;

//Define scales
var x = d3.scale.linear()
.domain([xMin, xMax])
.range([0, width]);

var y = d3.scale.linear()
.domain([yMin, yMax])
.range([height, 0]);

var colourScale = function(val){
var colours = ['#9d3d38','#c5653a','#f9b743','#9bd6d7'];
if (val > 30) {
return colours[0];
} else if (val > 10) {
return colours[1];
} else if (val > 0) {
return colours[2];
} else {
return colours[3];
}
};


//Define X axis
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.tickSize(-height)
.tickFormat(d3.format("s"));

//Define Y axis
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(5)
.tickSize(-width)
.tickFormat(d3.format("s"));

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.behavior.zoom().x(x).y(y).scaleExtent([1, 8]).on("zoom", zoom));

svg.append("rect")
.attr("width", width)
.attr("height", height);

svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);

svg.append("g")
.attr("class", "y axis")
.call(yAxis);

// Create points
svg.selectAll("polygon")
.data(data)
.enter()
.append("polygon")
.attr("transform", function(d, i) {
return "translate("+x(d.TotalEmployed2011)+","+y(d.MedianSalary2011)+")";
})
.attr('points','4.569,2.637 0,5.276 -4.569,2.637 -4.569,-2.637 0,-5.276 4.569,-2.637')
.attr("opacity","0.8")
.attr("fill",function(d) {
return colourScale(d.ProjectedGrowth2020);
});

// Create X Axis label
svg.append("text")
.attr("class", "x label")
.attr("text-anchor", "end")
.attr("x", width)
.attr("y", height + margin.bottom - 10)
.text("Total Employment in 2011");

// Create Y Axis label
svg.append("text")
.attr("class", "y label")
.attr("text-anchor", "end")
.attr("y", -margin.left)
.attr("x", 0)
.attr("dy", ".75em")
.attr("transform", "rotate(-90)")
.text("Median Annual Salary in 2011 ($)");


function zoom() {
svg.select(".x.axis").call(xAxis);
svg.select(".y.axis").call(yAxis);
}
});

任何帮助将不胜感激。

最佳答案

示例中的网格线实际上是轴刻度!所以你会注意到你的缩放功能会在鼠标事件上更新它们,但你永远不会更新点的位置。您应该将点定位线复制到缩放功能中(或将其分解为单独的功能)。

这是我的样子:

function zoom() {
svg.select(".x.axis").call(xAxis);
svg.select(".y.axis").call(yAxis);
svg.selectAll("polygon")
.attr("transform", function(d, i) {
return "translate("+x(d.TotalEmployed2011)+","+y(d.MedianSalary2011)+")";
})
.attr('points','4.569,2.637 0,5.276 -4.569,2.637 -4.569,-2.637 0,-5.276 4.569,-2.637');
}

你可以试试 here

关于plot - d3.js 缩放/拖动散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874865/

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