我在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如果括号有任何问题,我将数据复制到问题框时就犯了错误)
当我查看控制台编辑器时,我看到:
答案 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;
})))