【问题标题】:d3 grouped bar chart creation issued3分组条形图创建问题
【发布时间】:2016-01-23 11:00:54
【问题描述】:

我想使用 d3 创建一个分组条形图,但我看到的所有示例的数据格式都与我的不同,我无法弄清楚如何使用我的数据格式绘制图表。

例如:http://bl.ocks.org/mbostock/3887051

这是我的数据:

var data =[
{
  "data": [
    [
      "2016-01-21T01:20:00.000Z",
      1.41818181818182
    ],
    [
      "2016-01-21T02:28:00.000Z",
      1.90661764705882
    ],
    [
      "2016-01-21T03:36:00.000Z",
      1.66764705882353
    ],
    [
      "2016-01-21T04:44:00.000Z",
      1.51691176470588
    ],
    [
      "2016-01-21T05:52:00.000Z",
      1.40955882352941
    ],
    [
      "2016-01-21T07:00:00.000Z",
      1.46323529411765
    ],
    [
      "2016-01-21T08:08:00.000Z",
      1.48308823529412
    ],
    [
      "2016-01-21T09:16:00.000Z",
      1.89384615384615
    ]
  ],
  "label": "a"
},
{
  "data": [
    [
      "2016-01-21T01:20:00.000Z",
      4.98701298701299
    ],
    [
      "2016-01-21T02:28:00.000Z",
      5.0
    ],
    [
      "2016-01-21T03:36:00.000Z",
      4.94852941176471
    ],
    [
      "2016-01-21T04:44:00.000Z",
      4.91176470588235
    ],
    [
      "2016-01-21T05:52:00.000Z",
      4.81617647058824
    ],
    [
      "2016-01-21T07:00:00.000Z",
      5.0
    ],
    [
      "2016-01-21T08:08:00.000Z",
      4.94117647058824
    ],
    [
      "2016-01-21T09:16:00.000Z",
      4.96969696969697
    ]
  ],
  "label": "b"
}
];

所以请帮助我使用我的数据格式创建分组条形图。

到目前为止我写的代码:CODE

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    而不是这个:

       .attr("height", function(d) {
            return y(d[1]); //Note this is returning data
          })
    

    应该是

     .attr("height", function(d) {
        return height - y(d[1]); //Note this is returning data
      })
    

    您还没有制作另一个刻度来定位条形,因此条形会一个接一个。

    var x1 = d3.scale.ordinal();
    x1.domain(data.map(function(d){return d.label})).rangeRoundBands([0, x.rangeBand()]);
    

    然后在组中,您需要进行这样的转换以对齐 a 条和 b 条:

      .attr("transform", function(d,i) { 
        var r = parseFloat(x1(d.label));
        if (r == 0){
          r = r-5;
        }
        return "translate(" +  r  + ",0)"; 
    
      })
    

    工作代码here

    希望这会有所帮助!

    【讨论】:

    • 感谢您的解决方案。请问为什么要减5?如果不是 2 条数据,而是提供数据来创建 3 条数据,代码在这种情况下也能正常工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多