【发布时间】:2014-01-24 02:20:38
【问题描述】:
我是 d3 新手,也不是 javascript 专家。我发现了类似的问题,但没有一个是我正在寻找的。 我有两个 csv 文件,一个带有看起来像这样的学校数据 id、姓名、经度、纬度
另一个csv有网络数据
id、netId(这是连接的其他学校id)、hits(这基本上是两者之间有多少连接学校)
我将学校数据绑定到地图上的圆圈。我想要做的是点击一下,找到每个连接的学校,并根据他们有多少连接在地图上转换他们的圈子。
我假设这需要一系列 for 循环,但我不确定最好的方法。 目前,跳过所有地图创建的东西,我有这个:
var currData = [];
d3.csv("network.csv", function(networkData){
d3.csv("schoolData.csv", function(data) {
//create the circles
var circle = svg.selectAll("circle")
//bind the data
.data(data)
.enter()
.append("circle")
.attr("cx", function(d) {
return projection([d.lon, d.lat])[0];
})
.attr("cy", function(d) {
return projection([d.lon, d.lat])[1];
})
//initial style of circles (will move this into a class eventually)
.attr("r", 5)
.style("fill", "orange")
.style("opacity", 0.75)
//on click
.on("click", function (d) {
for (i = 0; i<= networkData.length; i++) {
if(d.id == networkData[i].id) {
currData.push({"netId": networkData[i].netId,
"hits": networkData[i].hits}
)}
};
如果我在 for 循环中将它记录到控制台,这将返回 netId 并命中,但我似乎无法在 for 循环之外访问 currData。我不确定为什么。 我也不确定获取每个后续 netId 并将它们链接回绑定到圆形元素的学校数据的最佳方法。我是否让这变得比必要的更复杂? D3 有简单的方法吗?
当在地图上点击一个圆圈时,我需要找到所选学校在网络中的学校 id,然后根据点击次数在地图上更改他们的圆圈。非常喜欢this。
数据如下:
School Data:
id,school,lon,lat
1,UC Berkeley,-122.250502,37.872855
2,UC Los Angeles,-118.445227,34.06886
3,Cal State Los Angeles,-118.168266,34.068232
4,University of Southern California,-118.2866414,34.021801
Network Data:
id,netId,hits
193,220,1
193,229,5
193,226,1
193,49,1
124,226,11
124,201,1
278,175,7
341,227,1
341,310,2
341,135,1
101,201,1
【问题讨论】:
-
定义“点击一下,找到每个连接的学校,并根据他们有多少连接在地图上转换他们的圈子。”并给出两个数据集的示例作为上下文。
-
如果你能准备一个 jsfiddle 或类似的东西也会有所帮助。
-
我已编辑添加数据示例并希望澄清。让我知道它是否需要更多。我看看能不能弄个小提琴。
标签: javascript csv d3.js