d3.js
需要你明確地方你吧座標,所以,你可以把你的酒吧,在那裏你永遠喜歡:
// create a group for your overlapped bars
var g = svg.selectAll(".bars")
.data(data)
.enter().append("g")
// place the first bar
g.append("rect")
.attr("class", "bar1")
.attr("x", function(d) {
return x(d.letter) + 10; // center it
})
.attr("width", x.rangeBand() - 20) // make it slimmer
.attr("y", function(d) {
return y(d.col1);
})
.attr("height", function(d) {
return height - y(d.col1);
});
// place the second bar on top of it
g.append("rect")
.attr("class", "bar2")
.attr("x", function(d) {
return x(d.letter);
})
.attr("width", x.rangeBand())
.attr("y", function(d) {
return y(d.col2);
})
.attr("height", function(d) {
return height - y(d.col2);
});
這是一個快速example。
EDITS
要及時添加,你必須做出一些改變。
設置一個時間格式化,解析您的日期/時間你的文件:
// say date/times are local 20160622 15:00
var timeFormatter = d3.time.format("%Y%m%d %H:%M")
設置一個時間X-規模爲您的軸:
// x scale showing 1 day - 06/22/2015
var x = d3.time.scale()
.range([0,width])
.domain([timeFormatter.parse("20150621 00:00"), timeFormatter.parse("20150622 00:00")])
當你畫矩形,寬度是從endTime到startTime的像素數:
g.append("rect")
.attr("class", "bar1")
.attr("x", function(d) {
return x(d.startTime1); // start at startTime
})
.attr("width", function(d,i){
return x(d.endTime1) - x(d.startTime1); // pixel width from end to start
})
.attr("y", function(d) {
return y(d.col1);
})
.attr("height", function(d) {
return height - y(d.col1);
});
示例here。
完美地工作 - 謝謝!下一個和最後一個查詢 - 圖表上只有兩列(一個灰色,一個藍色)。我使用一個小節來表示時間段,例如上午8:10至下午15:00,其他酒吧時間09:45至15:00。我可以使每個欄的寬度反映時間段嗎? – user3343633
不幸的是,我不能滿足這個優秀的答案(沒有足夠的分數)。 – user3343633
@ user3343633,請參閱更新以回答。 – Mark