javascript - 嵌套函数不汇总值

标签 javascript d3.js chart.js

我想获取“国家/地区”列的总和值,我编写了这段代码,但看不到汇总值

<html>
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
    </head>
    <body>
        <canvas id="barchart" width="100%" height="40%"></canvas>
        <canvas id="piechart" width="100%" height="40%"></canvas>
        <script>
            d3.csv("brokenstone copy.csv", function(csv_data) {
                var nested_data = d3.nest()
                                    .key(function(d) {return d.Country})
                                    .rollup(function(s){
                                                 return d3.sum(s,function(d) {
                                                                  return d.Amount;
                                                              })
                                    })
                                    .entries([csv_data]);
                  console.log(nested_data);
                 return csv_data;
            }).then(makechart);

            function colorGen() {
                const r = Math.floor(Math.random() * 256);
                const g = Math.floor(Math.random() * 256);
                const b = Math.floor(Math.random() * 256);
                const transparent = '0.6';

                return "rgb(" + r + "," + g + "," + b + "," + transparent + ")";
                }

            function makechart(csv_data){
               // console.log(csv_data);

                var prd = [], 
                    amt = [], 
                    frac = [];

                    csv_data.forEach(element => {
                    prd.push(element.Country);
                    amt.push(element.Amount);

                });

                var alldata = {};
                alldata['datasets'] = [];
                alldata['labels'] = ['Amount, тн'];

                csv_data.forEach(element => {
                    var sample = {};
                        sample['data'] = [element.Amount];
                        sample['backgroundColor'] = colorGen();
                        sample['label'] = element.Country;
                        alldata['datasets'].push(sample);
                });

               var barchart = new Chart('barchart', {
                    type: 'bar',
                    data: alldata,

                    options: {
                        responsive: true,
                        legend: {
                            position: 'top',
                    },

                    title: {
                        display: true,
                        fontSize: 16,
                        text: 'Country by amount, тн'
                        }                  
                    }
                });
        </script>
    </body>
</html>

我的数据:

Year,Month,Country,Amount  
2019,2,Germany,70    
2019,3,Germany,65
2019,1,Germany,61 
2019,1,Germany,39
2019,1,Italy,11966 
2019,5,Italy,2489 
2019,1,Italy,2262
2019,6,Germany,139 
2019,4,Germany,111
2019,5,Germany,69 
2019,6,Germany,67

最佳答案

这里的问题很简单:所有的 nested_data 嵌套都在 row 函数中。

为 CSV 中的每一行调用行函数。作为API说,

If a row conversion function is specified, the specified function is invoked for each row, being passed an object representing the current row (d), the index (i) starting at zero for the first non-header row, and the array of column names.

然而,这对鸟巢来说根本行不通。 nest() 方法需要获取所有数据数组。

也就是说,只需将嵌套移动到 then 内部即可。如您所见,您的嵌套本身没有问题:

const csv = `Year,Month,Country,Amount
2019,2,Germany,70 2019,3,Germany,65
2019,1,Germany,61
2019,1,Germany,39
2019,1,Italy,11966
2019,5,Italy,2489
2019,1,Italy,2262
2019,6,Germany,139
2019,4,Germany,111
2019,5,Germany,69
2019,6,Germany,67`;

const data = d3.csvParse(csv, d3.autoType);

const nested_data = d3.nest()
  .key(function(d) {
    return d.Country
  })
  .rollup(function(s) {
    return d3.sum(s, function(d) {
      return d.Amount;
    })
  })
  .entries(data);

console.log(nested_data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

关于javascript - 嵌套函数不汇总值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053542/

相关文章:

javascript - 图像更改 onclick Javascript,我可以添加一个计时器来更改吗?

javascript - 如果执行某些 php 脚本则刷新页面

javascript - 在 Chrome devtools 分析器中,递归保留树是什么意思

javascript - D3.js JSON解析错误

javascript - Chart.js 无法在移动设备(safari/chrome)上绘制,在桌面上正常

javascript - Mongoose getter正在获取未定义的参数

javascript - 尝试为 map D3,js v4 中的空值分配颜色

d3.js - D3 : Is it possible to add multiple (more than 2) edges between nodes?

javascript - Chart.JS - 在点之上显示值

javascript - Chart.js 2 - 如何始终显示所有工具提示并对其进行样式化