Javascript D3.js使用spectrum.js函数为节点圆着色
对于每个节点,我都有一个圆,我使用函数Javascript D3.js使用spectrum.js函数为节点圆着色,javascript,jquery,json,d3.js,spectrumjs,Javascript,Jquery,Json,D3.js,Spectrumjs,对于每个节点,我都有一个圆,我使用函数ColorType(d)对其着色: 我的ColorType函数是 function ColorType(d){ for (var i = 0; i < TypesTab.length; i++) { if (d.type == TypesTab[i].type) { return ColorAction;} } } 问题是当我在ColorType(d)函数中硬编码类型时 if (d.type == "school
ColorType(d)
对其着色:
我的ColorType
函数是
function ColorType(d){
for (var i = 0; i < TypesTab.length; i++) {
if (d.type == TypesTab[i].type) { return ColorAction;}
}
}
问题是当我在ColorType(d)
函数中硬编码类型时
if (d.type == "school") { return ColorAction;}
它仅成功为学校类型节点着色。但是,如果我想使其成为动态的,以便它使用颜色选择器指定的类型对节点进行着色,那么它将失败,因为我无法与o.type
的每个进行连接。因此,问题是将o.type
的每个传递到ColorAction
和/或ColorType(d)
中,以便每个容器仅为其自身类型的节点着色
这是一次失败的尝试,因为它没有考虑o.type
,而是从一个全局变量(TypesTab
)读取类型中的类型
,该变量保存类型中的所有类型
:
function ColorType(d){
for (var i = 0; i < TypesTab.length; i++) {
if (d.type == TypesTab[i].type) { return ColorAction;}
}
}
这就是我读取/导入JSON的方式。内部for in是基本的,因此您需要更改该部分以满足您的需要
d3.json(“data.json”),函数(错误,数据){
console.log(d3.values(data));//作为检查执行此操作
for(数据中的var d){
d、 节点=+d.nodes;
d、 links=+d.links;
d、 类型=+d.类型;
}
//我可以去这里
})
这是我如何读取/导入JSON的。内部for in是基本的,因此您需要更改该部分以满足您的需要
d3.json(“data.json”),函数(错误,数据){
console.log(d3.values(data));//作为检查执行此操作
for(数据中的var d){
d、 节点=+d.nodes;
d、 links=+d.links;
d、 类型=+d.类型;
}
//我可以去这里
})
这可能不是答案,但一般来说,在比较中应该使用===而不是==。如果==还没有伤害到你,它肯定会伤害你。为什么-因为===同时测试相等值和相等类型。请参阅此SO帖子以获取解释。你已经发布了很多有用的信息,但在这种情况下,它掩盖了这个问题。你能把这个问题分解成一个简单的例子吗?好的,你知道JSON格式不正确,在“{”type“:“company”,“image:“image03”}”之后有一个额外的逗号,`JSON标准不允许在第15行尾随逗号和JSON…','或者']'应该是,得到'.''。另外,为什么要使用$.getJSON呢?为什么不使用d3的内置函数d3.json()来导入数据呢?事实上,您正在使用很多jQuery,其中最好只使用d3.js函数?这可能不是答案,但一般来说,在比较中应该使用===而不是==。如果==还没有伤害到你,它肯定会伤害你。为什么-因为===同时测试相等值和相等类型。请参阅此SO帖子以获取解释。你已经发布了很多有用的信息,但在这种情况下,它掩盖了这个问题。你能把这个问题分解成一个简单的例子吗?好的,你知道JSON格式不正确,在“{”type“:“company”,“image:“image03”}”之后有一个额外的逗号,`JSON标准不允许在第15行尾随逗号和JSON…','或者']'应该是,得到'.''。另外,为什么要使用$.getJSON呢?为什么不使用d3的内置函数d3.json()来导入数据呢?事实上,您正在使用很多jQuery,其中最好只使用d3.js函数?我得到类型错误:data.forEach不是函数
@jacky OK,所以我的错误是尝试使用for In而不是forEach循环。这也是一个很大的错误,反正这不是直接解决这个问题的答案。你能为我得到的问题提供一个有效的答案吗?TypeError:data.forEach不是一个函数
@jacky好的,所以我的错误是用for代替forEach循环。这也是一个很大的错误,反正这不是直接解决这个问题的答案。你能为这个问题提供一个有效的答案吗
if (d.type == "school") { return ColorAction;}
function ColorType(d){
for (var i = 0; i < TypesTab.length; i++) {
if (d.type == TypesTab[i].type) { return ColorAction;}
}
}
{
"nodes": [
{
"type": "school",
"country": "US",
"name": "saint peter's",
"id": 1006
},
{
"type": "univeristy",
"country": "Brazil",
"name": "saint joseph's",
"id": 1007
}
...
],
"links": [
{
"source": 1006,
"target": 1007,
"value": 20
},
...
],
"types": [
{
"type": "school",
"image": "image01"
},
{
"type": "univeristy",
"image": "image02"
},
{
"type": "company",
"image": "image03"
},
...
]
}