【问题标题】:Dynamic div creation for dc.js and implementing crossfiltered dashboard为 dc.js 创建动态 div 并实现交叉过滤仪表板
【发布时间】:2018-03-16 18:04:49
【问题描述】:

我正在创建一个通用仪表板,您可以在其中上传任何数据——具有任意数量的列,应该能够使用 dc.js 动态地可视化条形图。 到目前为止,我一直在为每一列创建单独的 div 元素(当文件列类型和计数已知时)。我应该怎么做才能根据上传的csv文件的列数自动创建div,以便在启用交叉过滤器的情况下相应地创建图表?

注意:通用意味着文件可以有任意数量的列,并且都应该是条形图。我想要的是——根据列数,它应该像我们在 dc.js 中实现的那样动态创建条形图(交叉过滤功能——根据 csv 文件中的列数创建维度和组)

【问题讨论】:

    标签: dc.js crossfilter


    【解决方案1】:

    我通常只用 d3 生成 div:

    var cols = ['col1', 'col2', 'col3'];
    var divs = d3.selectAll('div.yourchart').data(cols);
    divs.enter().append('div').attr('class', 'yourchart');
    
    var dcCharts = new Array(cols.length);
    divs.each(function(col, i) {
      var dimension = cf.dimension(function(d) { return d[col]; });
      var group = dimension.group(); // or however you want to bin them
      var bar = dc.barChart(this) // pass div element as parent/root instead of using selector
          .dimension(dimension)
          .group(group)
          // ...
      dcCharts[i] = bar;
    });
    

    dc.js 图表可以在给定父/根 元素 而不是选择器的情况下构建,在这里很有用。

    【讨论】:

    • 我不明白 'yourchart' 是干什么用的?我看到那是一门课,我完全不明白。如果可能,请通过演示 jsfiddle 或相关工作帮助我理解。
    • 嗯,抱歉,我并不是真的愿意为你写这篇文章,只是想为你指明正确的方向。 yourclass 是用于标识 div 的任何唯一类名称,以便 d3 general update pattern 知道要添加/更新/删除什么。我更正了上面的一个错字。我的观点是没有魔法,你只需创建 div,当你初始化图表时,你传递的是元素而不是选择器。
    • 您好,我完全按照您的说法使用了您的建议。我从来没有用 id dc-chart1 制作过任何图表你能帮我解决错误“图表[#dc-chart1] 上缺少强制性属性chart.x”
    • 该错误意味着您需要在定义图表时指定.x(...)... 应该是什么取决于您的数据。我没有在上面给出完整的图表定义——您需要查看您之前的代码以及网络上的示例,以了解如何定义您的图表。
    • 我想通了。我能行。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多