javascript - 使用 for 循环添加多个图表 d3、nvd3

标签 javascript jquery d3.js nvd3.js

我正在尝试使用 nvd3 和 d3 生成多个图表。我有适量的 div。

如果我删除 forloop,那么我会在 #chart1 中得到一个图表。如果我放置 for 循环,那么我只能在 #chart2 中获得图表。

有人能明白为什么吗?

for (var j = 1; j <= 2; j += 1) {
    var s = '#chart' + j.toString() + ' svg';
    console.log(s);

    nv.addGraph(function() {
        var chart = nv.models.lineChart();

        chart.xAxis.axisLabel('Time step').tickFormat(d3.format(',r'));
        chart.yAxis.axisLabel('eig(' + j.toString() + ')').tickFormat(d3.format('.02f'));
        d3.select(s).datum(function() {

            var sin = [], cos = [];
            for (var i = 0; i < 100; i++) {
                sin.push({
                    x : i,
                    y : Math.sin(i / 10)
                });
                cos.push({
                    x : i,
                    y : .5 * Math.cos(i / 10)
                });
            }

            result = [];
            result.push({
                values : sin,
                key : 'sin',

            });

            return result;
        }).transition().duration(500).call(chart);

        nv.utils.windowResize(chart.update);
        return chart;
    });
}

最佳答案

首先,像您一样使用 for 循环并不常见(数据驱动文档)。在 d3 中,最好选择您想要的所有元素并使用 .each() 像这样

d3.selectAll('.chart svg')
    .each(function(data){
        // Do what you would have done in the loop here
})

其次,按照您的方式使用匿名函数似乎存在问题(不知道为什么,也没有花太多时间查找)。通过将其作为实际函数调用,它就可以工作。

nv.addGraph(addMyChart(this))

查看这个 JSFiddle http://jsfiddle.net/a5BYP/

关于javascript - 使用 for 循环添加多个图表 d3、nvd3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18955071/

相关文章:

javascript - 找不到创建命令行启动器 Intellij

php - 将 mysql where 子句列名和运算符传递给 PHP ajax 脚本是否安全

javascript - JQuery数据表插入数据后不刷新

jquery - 如何根据另一个 div 的内容使用 jQuery 隐藏一个 div

arrays - 如何访问 D3 中的嵌套数据值

javascript - 如何获取 less 文件中定义的颜色的 RGB 值?

javascript - dc.js 二维有序堆积条形图,获取 NaN 值并且不显示堆积条形图

javascript - 将 2 个值作为键和值放入 obj 数组中

javascript - 多个javascript源和一个源有什么不同?

javascript - 有没有办法在一段时间后没有点击或任何其他事件来刷新 DOM?