首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在D3js中使用相同的代码得到不同的结果?

为什么在D3js中使用相同的代码得到不同的结果?
EN

Stack Overflow用户
提问于 2016-12-17 08:08:01
回答 1查看 70关注 0票数 3

在使用d3js的条形图项目中,我已经到达了一个死胡同。我试着用tsv文件中的数据来找出不同国家无人机数量的总和。由于电子表格中的多个条目来自同一个国家,所以我想添加这些值。

所以,当我在.attr('y')下运行一次代码时,它就成功了。我仔细检查了电子表格和加起来的金额。但是,当我在.attr('height')中运行相同的条件时,我得到了一些不稳定的值,这些值扰乱了条形图。下面是我遇到麻烦的代码:

代码语言:javascript
复制
 g.selectAll(".bar")
    .data(data)
    .enter().append("rect")
      .attr("class", "bar")
      .attr("x", function(d) { return x(d.Country); })
      .attr("y", function(d,i) { 

        try{
          if (data[i].Country == data[i-1].Country){

            data[i].Registration += data[i-1].Registration;
          }
          else{
            console.log(data[i-1].Country + ' ' + data[i-1].Registration);
            return data[i-1].Registration;//y(data[i-1].Registration);
          }
        }
        catch(err){
          console.log('did not work')
        }

      })
      .attr("width",20)
      .attr("height", function(d,i) { 
        try{ //SAME CODE DIFFERENT REGISTRATION VALUES

          if (data[i].Country == data[i-1].Country){
            data[i].Registration += data[i-1].Registration;
          }
        else{ console.log(data[i-1].Country + ' ' + data[i-1].Registration); return (height - data[i-1].Registration);}
        }
        catch(err){
          console.log('did not work')
        }


      });
    })

tsv文件如下所示:

代码语言:javascript
复制
Country Registration
land Islands   1
American Samoa  1
American Samoa  1
American Samoa  1
American Samoa  6
American Samoa  1
American Samoa  1
American Samoa  1
Antigua and Barbuda 1
Argentina   1
Australia   1
Australia   2
Australia   1
Australia   1
Brazil  1
Brazil  1
Brazil  1

我已经把整段代码放在js小提琴上了。我真的很感激帮助,因为我已经花了超过一天的压力解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-17 09:34:16

你需要总结一下你的价值观:

因此,如果你的数据有多个“美属萨摩亚”,那么你需要总结所有的无人机,总计12架。

为此,可以使用d3 nest对其注册进行分组和汇总。

代码语言:javascript
复制
  var data_sum = d3.nest()
  .key(function(d) { return d.Country; })//group by country
  .rollup(function(v) { return d3.sum(v, function(d) { return d.Registration; }); })//roll up all resgistrations
  .entries(data);

现在,这将给您总结数据,这些数据可以用来制作条形图,就像这个示例一样。

工作代码这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41196660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档