代码之家  ›  专栏  ›  技术社区  ›  ssp3nc3r

使用r2d3在d3.js中使用r data.frame对象

  •  0
  • ssp3nc3r  · 技术社区  · 6 年前

    我试图理解如何使用包将r数据帧传递给d3.js脚本 r2d3 是的。的延伸 R2D3型 访问变量的条形图示例 data.frame 对象会有帮助。

    R代码:

    library(r2d3)
    data <- data.frame(nums = c(0.3, 0.6, 0.8, 0.95, 0.40, 0.20))
    r2d3(data, script = "test.js")
    

    JS代码:

    var barHeight = Math.floor(height / data.length);
    
    svg.selectAll('rect')
      .data(data.nums)
      .enter().append('rect')
        .attr('width', function(d) { return d * width; })
        .attr('height', barHeight)
        .attr('y', function(d, i) { return i * barHeight; })
        .attr('fill', 'steelblue');
    

    错误:

    Error: svg.selectAll(...).data(...).enter is not a function in (test.js#5:4)
    TypeError: svg.selectAll(...).data(...).enter is not a function
    
    0 回复  |  直到 6 年前
        1
  •  4
  •   Andrew Reid    6 年前

    发生此错误的原因是 data.nums 未定义。

    你的 data 变量不是包含以下数组的对象:

    var data = {
          nums: [0.3,0.6,0.8,0.95,0.40,0.20]
        }
    

    但是,更确切地说,是一个包含对象的数组:

    var data = [
      {nums:0.3},
      {nums:0.6},
      {nums:0.8},
      {nums:0.95},
      {nums:0.40},
      {nums:0.2}
    ]
    

    为了留住你 r 边码,我们只需要把数据数组本身传递给 selection.data() 并访问 nums 每个基准的特性:

    var barHeight = Math.floor(height / data.length);
    
    svg.selectAll('rect')
      .data(data)
      .enter().append('rect')
        .attr('width', function(d) { return d.nums * width; })
        .attr('height', barHeight)
        .attr('y', function(d, i) { return i * barHeight; })
        .attr('fill', 'steelblue');