【发布时间】:2014-01-25 01:39:32
【问题描述】:
我正在尝试创建一个与此示例类似的分组条形图:http://bl.ocks.org/mbostock/3887051 我的数据是来自 MongoDB 的 JSON,我无法访问一些嵌套数据。我希望图表在 Y 轴上按 buildFixTime 排列,X 轴按时间排列,条形按“组”分组。这是一个示例记录:
{
"result" : [
{
"_id" : {
"month" : 1,
"day" : 22,
"year" : 2014,
"group" : "Sales"
},
"buildFixTime" : 3710497
},
{
"_id" : {
"month" : 1,
"day" : 23,
"year" : 2014,
"group" : "Sales"
},
"buildFixTime" : 79209205
},
{
"_id" : {
"month" : 1,
"day" : 24,
"year" : 2014,
"group" : "Sales"
},
"buildFixTime" : 35611663.4
},
{
"_id" : {
"month" : 1,
"day" : 24,
"year" : 2014,
"group" : "Service"
},
"buildFixTime" : 18273221.333333332
}
],
"ok" : 1
}
加载 JSON 文件后,我有以下代码(不包括不重要的部分):
// This adds new elements to the data object
data.result.forEach(function(d) {
d.group = d._id.group;
d.date = new Date(d._id.year, d._id.month-1, d._id.day);
});
// define the axis domains
main_x0.domain(d3.extent(data.result, function(d) { return d.date; }));
main_x1.domain(d3.ascending(data.result, function(d) { return d.group; } ));
main_y.domain(d3.extent(data.result, function(d) { return (d.buildFixTime / 1000) / 60 / 60 + 2 ; }));
// flatten out the data
var nested = d3.nest()
.key(function(d) { return d._id.group; })
.entries(data.result);
添加轴线等后,我有这个块,这就是问题所在。我认为我需要能够访问转换/翻译行中的日期,但我不确定如何获取它 - 我应该创建另一个 D3 嵌套对象以进一步展平数据吗?感谢您的帮助!
var bar = main.selectAll(".bars")
.data(nested)
.enter().append("g")
.attr("class", "g")
// This seems to be where part of my problem is
.attr("transform", function(d) { console.log(d); return "translate(" + main_x0(d.values.date) + ",0)"; });
bar.selectAll("rect").append("rect")
.data(function(d) { return d.values; })
.enter().append("rect")
.attr("transform", function(d) { console.log(d.date); return "translate(" + main_x0(d.date) + ",0)"; })
.attr("width", main_x1.rangeBand())
.attr("x", function(d) { return main_x1(d.date); })
.attr("y", function(d) { return main_y(d.buildFixTime); })
.attr("height", function(d) { return main_height - main_y(d.buildFixTime); })
.style("fill", function(d) { return color(d.key); });
【问题讨论】:
-
我不确定您为什么要在
g元素上设置transform。对于各个条形,您拥有放置它们所需的所有信息,而这正是您真正需要做的。 -
你能澄清一下吗?您希望将给定月份的所有条形图组合在一起,还是将给定“组”的所有条形图组合在一起?
-
你能提供正确的来源吗?我很想建立小组。