D3.js 希望使用长度(从d3.nest开始)作为半径
关于使用以下结果,我有一个心理障碍:D3.js 希望使用长度(从d3.nest开始)作为半径,d3.js,D3.js,关于使用以下结果,我有一个心理障碍: .rollup(function(leaves) { return leaves.length;}) 如散点图中圆的半径。我的完整代码(和示例数据)在这里的一个plunk中 散点的静态值为5,但我想使用基于d3.nest的.rollup的值,正如我在另一个问题中所解释的: 我想我在这部分代码中缺少了一个关键概念: d3.tsv("etds_small.tsv", function(error, dataset) { dataset.forEac
.rollup(function(leaves) { return leaves.length;})
如散点图中圆的半径。我的完整代码(和示例数据)在这里的一个plunk中
散点的静态值为5,但我想使用基于d3.nest的.rollup的值,正如我在另一个问题中所解释的:
我想我在这部分代码中缺少了一个关键概念:
d3.tsv("etds_small.tsv", function(error, dataset) {
dataset.forEach(function(d) {
if(deptlist.indexOf(d.dept) == -1) deptlist.push(d.dept);
if(years.indexOf(d.year) == -1) years.push(d.year);
})
var deptYearCount = d3.nest()
//.key(function(d) { return d.college;} )
.key(function(d) { return d.dept})
.key(function(d) { return d.year })
.rollup(function(leaves) { return leaves.length;})
.map(dataset);
console.log(dataset); // retains the college, dept, and year labels
console.log(deptYearCount); // replaces labels with "key"
x.domain(years.sort(d3.ascending));
y.domain(deptlist.sort(d3.ascending));
//console.log(y.domain());
//console.log(x.domain());
svg.selectAll(".dot")
.data(dataset) //should this be deptYearCount from the d3.nest above?
.enter().append("circle")
.attr("class", "dot")
.attr("r", 5) // Would like to use length (from d3.nest) as radius
//.attr("r", function(d) {return d.values.length*1.5;}) works with .data(debtYearCount)
.style("opacity", 0.3)
.style("fill", "#e31a1c" )
.attr("cx", function(d) {
return x(d.year);
})
.attr("cy", function(d) {
return y(d.dept);
});
尝试一下你的半径:
.attr("r", function(d) {return Object.keys(deptYearCount[d.dept]).length*1.5;})
由于使用的是.map(dataset)
而不是.entries(dataset)
,因此d3.next()将返回一个大对象,而不是一个对象数组。一个大对象不包含名为values
的属性
最新解释:
首先,查看对象的结构deptYearCount
。它的属性名称有地球科学。
,教育。
等
我们的d3数据正在对象数组上迭代。每个对象都有属性dept
,看起来像地球科学。
,教育。
,等等
因此,deptYearCount[d.dept]
正在帮助我们找到deptYearCount
中的正确属性
例如,在我们迭代的一轮中,我们正在查看deptYearCount[“Education.”]
。这是另一个具有属性的对象,如2007
,2008
,等等。因此,deptYearCount[“Education.”]
中的属性数就是我们想要的半径值
如何查找
deptYearCount[“Education.”]
的属性数?一种方法是Object.keys(someObject)
函数。它返回一个与属性名称对应的字符串数组,我们只需要它的.length
试试你的半径:
.attr("r", function(d) {return Object.keys(deptYearCount[d.dept]).length*1.5;})
由于使用的是.map(dataset)
而不是.entries(dataset)
,因此d3.next()将返回一个大对象,而不是一个对象数组。一个大对象不包含名为values
的属性
最新解释:
首先,查看对象的结构deptYearCount
。它的属性名称有地球科学。
,教育。
等
我们的d3数据正在对象数组上迭代。每个对象都有属性dept
,看起来像地球科学。
,教育。
,等等
因此,deptYearCount[d.dept]
正在帮助我们找到deptYearCount
中的正确属性
例如,在我们迭代的一轮中,我们正在查看deptYearCount[“Education.”]
。这是另一个具有属性的对象,如2007
,2008
,等等。因此,deptYearCount[“Education.”]
中的属性数就是我们想要的半径值
如何查找
deptYearCount[“Education.”]
的属性数?一种方法是Object.keys(someObject)
函数。它返回一个与属性名对应的字符串数组,我们只需要它的.length
有趣。半径应该代表什么?较大的圆圈表示该年每个部门的论文数较多。我还会在工具提示中使用相应的值。半径应该代表什么?较大的圆圈表示该年每个部门的论文数较多。我也会在工具提示中使用相应的值。像冠军一样工作!非常感谢。你介意带我看一下代码吗?它为什么会工作?Object.keys(deptYearCount[d.dept])@如果这是在线的,你能分享一下吗?像冠军一样工作!非常感谢。你介意带我看一下代码吗?它为什么会工作?Object.keys(deptYearCount[d.dept])@如果这是在线的,你能分享一下吗?