javascript - 使用 d3.js 从 csv 文件创建多线图表

标签 javascript csv d3.js

我尝试使用 csv 文件创建多线图表。 csv 文件的内容如下所示:

日期,A,B 100,1,0 101,2,0 102,3,0 103,4,0 104,5,0 105,6,1 106,7,2 107,8,3 108,9,4 109,10,5 110,11,6

首先我尝试单独创建它们

//This is for the line A    
    var lineGen = d3.svg.line()  
                    .x(function(d) {
                      return xScale(d.date);
                    })
                    .y(function(d) {
                      return yScale(d.A);
                    })
                    .interpolate("basis");
//This is for the line B
    var lineGen2 = d3.svg.line()
                     .x(function(d) {
                       return xScale(d.date);
                     })
                     .y(function(d) {
                       return yScale(d.B);
                     })
                     .interpolate("basis");

var data = d3.csv("new_test2.csv", function(data) {
             vis.append('svg:path') 
               .attr('d', lineGen(data))  //This is for the line A
               .attr('stroke', 'green')
               .attr('stroke-width', 2)
               .attr('fill', 'none');

             vis.append('svg:path')
                .attr('d', lineGen2(data))  //This is for the line B
                .attr('stroke', 'blue')
                .attr('stroke-width', 2)
                .attr('fill', 'none');
             });

效果很好! 但显然大多数代码太冗余,因为它们只是对不同的列执行相同的操作。 我想知道是否有一种方法可以逐一访问每一列并绘制它的不同线?

现在我尝试使用 JavaScript 函数来处理参数:

function draw_line(c, data){
                    console.log(c);  
                    var lineGen = d3.svg.line()
                        .x(function(d) {
                            return xScale(d.date);
                        })
                        .y(function(d) {
                            console.log(d[c]);
                            return yScale(d[c]);
                        })
                        .interpolate("basis");
                    lineGen(data); 
                };
var data = d3.csv("new_test2.csv", function(data) {
                    vis.append('svg:path')
                    .attr('d', draw_line('A', data))
                    .attr('stroke', 'green')
                    .attr('stroke-width', 2)
                    .attr('fill', 'none');

                    vis.append('svg:path')
                    .attr('d', draw_line('B', data))
                    .attr('stroke', 'blue')
                    .attr('stroke-width', 2)
                    .attr('fill', 'none');
                });

但它不会打印出任何行,但是当使用 console.log 检查返回值时,一切似乎都很好。 这里出了什么问题?请帮忙:'(

感谢您提供的每一个答案!

(对于 vis.append 部分,我可能会使用 for 循环来遍历所有列,但我不确定如何处理颜色 -让每条线显示不同的颜色——所以我还没有处理这部分)

最佳答案

function draw_line(c, data){
                    console.log(c);  
                    var lineGen = d3.svg.line()
                        .x(function(d) {
                            return xScale(d.date);
                        })
                        .y(function(d) {
                            console.log(d[c]);
                            return yScale(d[c]);
                        })
                        .interpolate("basis");
                    lineGen(data); // this line should be return
                }; 

更改为

return lineGen(data); 

关于javascript - 使用 d3.js 从 csv 文件创建多线图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37387563/

相关文章:

javascript - 在 d3 v4 中添加 x,y 轴

javascript - 无法创建自动填充数组而不手动写入

javascript - TextArea 返回错误值

javascript - jQuery touchstart 多个元素

excel - 使用 VBA 在 Excel 中打开 CSV 会导致数据显示在两列而不是一列中

csv - gnuplot:仅使用最后 n 行

d3.js - 如何在 D3 中的多个单独的过渡多边形之间添加过渡延迟?

javascript - DataTables 单个列搜索

javascript - 我应该如何删除特定格式的链接?

python - 如何使用 Python 将 csv 文件转换为 xlsb?