D3堆积条形图g和rect没有显示

时间:2015-09-02 15:51:48

标签: javascript d3.js

我是D3新手,从小型JSON数据集开始使用小型堆积条形图。元素显示在DOM中,但我无法让它们在页面上实际呈现。这是一个代码笔链接:

http://codepen.io/robmweb/pen/epYyLB

这是相关的html和JS为了后人的缘故: HTML:

<div class="container-dashboard">
  <div class="report-card">
    <div class="card-content" id="report-issues">

    </div>
  </div>
</div>

JS:

//data
var width = 400;
var height = 250;
var data = 
[
  {
    type: 'Functional',
    total: 8,
    stacks: [1, 1, 2, 4]
  }, {
    type: 'Technical',
    total: 3,
    stacks: [1, 1, 1, 0]
  }, {
    type: 'GUI',
    total: 10,
    stacks: [3, 0, 0, 7]
  }, {
    type: 'Crash',
    total: 8,
    stacks: [8, 0, 0, 0]
  }
];

//add the svg
var svg = d3.select("#report-issues").append("svg")
  .attr({
    class: 'chart',
    width: '400',
    height: '250'
  });

/*
var xScale = d3.scale.linear()
    .domain([0, d3.max(data.stacks)])
    .range([0, width]);
*/

var g = svg.selectAll('g').data(data);

g.enter().append('g').attr({
  w: function (d, i) { return width },
  h: function (d, i) { return 30 },
  'transform': function (d, i) {
    return 'translate(0,' + i * 30 + ')';
  },
  'fill': "black"
})

var rect = g.selectAll('rect').data(function(d) {
  return d.stacks;
});

rect.enter().append('rect').attr({
  w: function (d, i) { return d * 3 },
  h: function (d, i) { return 10 },
  x: function (d, i) { return 0 },
  y: function (d, i) { return 0 },
  'fill': "red"
})

任何帮助都会受到赞赏,甚至可以链接到使用类似数据的堆积条形图上的精彩教程(我发现大多数都是矩阵)。

1 个答案:

答案 0 :(得分:0)

SVG元素大小的正确属性为heightwidth,而不是hw。您的代码可能存在其他问题,但该更改至少会使条形图可见。

g.enter().append('g').attr({
  width: function (d, i) { return width },
  height: function (d, i) { return 30 },

//...

rect.enter().append('rect').attr({
  width: function (d, i) { return d * 3 },
  height: function (d, i) { return 10 },