我想绘制开始日期和结束日期之间的距离。我使用x位置作为我的开始日期,我需要将矩形的宽度设置为开始和结束之间的天数。 (我认为)
以这种方式显示数据并没有按照需要运行:我需要在结束日期将宽度设置为END,但看起来规模会扭曲事物。谢谢!
var w = 925;
var h = 400;
var padding = 50;
var interactiveViz = d3.select("#viz").append("svg")
.attr("width", w)
.attr("height", h);
var minDate = new Date(1999, 1, 27),
maxDate = new Date(2013, 10, 9);
var xscale = d3.time.scale()
.domain([minDate, maxDate])
.range([0,w]);
var xaxis = d3.svg.axis()
.scale(xscale)
.tickFormat(d3.time.format('%Y'))
.tickValues([minDate, maxDate]);
interactiveViz.selectAll("rect")
.data(myData)
.enter()
.append("rect")
.attr("x", function(d) { return xscale(new Date(d.start)) })
.attr("y", function(d,i) { return i*15 })
.attr("height", "14px")
.attr("width", function(d) { return xscale(new Date(d.end)) });
interactiveViz.append("g")
.attr("class", "x-axis")
.attr("transform", "translate(0,"+(h-padding)+")")
.call(xaxis)
.selectAll("text")
.attr("y", "10px")
.style("fill", "#999999");
数据:
var myData = [
{"country":"name1","start":"1/27/1999","end":"12/8/2000"},
{"country":"name2","start":"1/29/1999","end":"12/21/1999"},
{"country":"name3","start":"12/5/2012","end":"12/18/2012"}
]
答案 0 :(得分:2)
您希望宽度等于开始日期和结束日期之间的像素数。
开始日期的像素位置为:
xscale(new Date(d.start))
结束日期的像素位置为:
xscale(new Date(d.end))
它们之间的像素数是
xscale(new Date(d.end)) - xscale(new Date(d.start))
宽度应该等于
.attr("width", function(d) { return xscale(new Date(d.end)) - xscale(new Date(d.start)) });