d3.js,使用d3.extent查找嵌套json值的最小值/最大值

时间:2016-08-09 19:54:05

标签: json d3.js

我在d3中构建了一个气泡图,我希望气泡的颜色基于我在本地json文件中的logFC值。

我的json文件如下所示:

{
   "name": "genes",
   "children": [    
     {
       "value": "9.57E-06",
       "logFC": "-5.51658163",
       "symbol": "BCHE",
     },
     {
       "value": "0.0227",
       "logFC": "3.17853632",
       "symbol": "GRIA2",
     },
     {
       "value": "0.00212",
       "logFC": "-2.8868275",
       "symbol": "GRIN2A",
     }   
   ]
}

该文件不平坦,这就是为什么我认为我在使用d3.extent引用叶节点时遇到问题。我知道我可以使用:

var color1 = d3.scale.linear()
        .domain([-5.51658163,3.17853632])   //manually putting in min/max into the domain
        .range(["lightgreen", "green"]);

但是我的数据会发生变化,并使代码动态化 - 我已经尝试了以下许多其他变体:

var color1 = d3.scale.linear()
        .domain([d3.extent(d3.values(data, function(data) { return +d.logFC;}))])
        .range(["lightgreen", "green"]);

基本上,我在叶子节点上使用d3.extent时遇到了麻烦。有没有一种简单的方法可以使用d3.extent查找最小值和最大值来查找logFC的最小值和最大值?

谢谢!

(PS如果括号有任何问题,我将数据复制到问题框时就犯了错误)

当我查看控制台编辑器时,我看到:

enter image description here

1 个答案:

答案 0 :(得分:5)

d3.extent接受一个值数组并将边界作为数组返回。所以我猜你的代码应该更像:

.domain(d3.extent(d3.values(data, function(data) { 
  return +d.logFC;
})))

(没有方括号)

不是100%肯定,因为我不知道你的例子中data变量是什么。

更新

如果数据变量是加载的JSON对象,请执行以下操作:

.domain(d3.extent(data.children.map(function(child) { 
  return +child.logFC;
})))