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])@如果这是在线的,你能分享一下吗?