gpt4 book ai didi

javascript - D3 填充日期和值

转载 作者:行者123 更新时间:2023-12-03 11:19:52 24 4
gpt4 key购买 nike

我正在使用 d3.time.scale 构建一个简单的条形图:

var data = [
{"date": new Date("1992-05-01 00:00:00"), "value": 10},
{"date": new Date("1997-05-01 00:00:00"), "value": 110},
{"date": new Date("2007-05-11 00:00:00"), "value": 34}
];

var width = 300;
var height = 200;
var barWidth = width / data.length;

var x_domain = d3.extent(data, function(d) { return d.date; });

var x = d3.time.scale()
.domain(x_domain)
.rangeRound([0, width]);

var y = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d.value; })])
.range([height, 0]);

var chart = d3.select(".chart")
.attr("width", width )
.attr("height", height )
.append("g")
.attr("transform", function(d, i) { return "translate(" + i * barWidth + ",0)"; });

var bar = chart.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d, i) {
return "translate(" + i * barWidth + ",0)";
});

bar.append("rect")
.attr("class", "bar")
.attr("y", function(d) {
return y(d.value);
})
.attr("height", function(d) {
return height - y(d.value);
})
.attr("width", barWidth - 1);

JSFiddle here .

每个日期值对一个条 - 简单。我想生成它们之间的日期并为它们分配 0 值。最好的方法是什么?

欢迎任何帮助

最佳答案

填写缺失的日期很简单,只需直接使用 JavaScript 即可。像这样的东西:

function addDays(date, days) {
var result = new Date(date);
result.setDate(date.getDate() + days);
return result;
}
function fillInDates(data){
// put current data hash for efficient retrieval
// determine min/max of data
var currentDates = {};
var maxDate = new Date(-1e15);
var minDate = new Date(1e15);
for (var i = 0; i <= data.length; i++){
if (data[i]['date'] > maxDate){
maxDate = data[i]['date'];
}
if (data[i]['date'] < minDate){
minDate = data[i]['date'];
}
currentDates[data[i]['date']]= data[i]['value'];
}
// loop data and fill in missing dates
var filledInDates = [];
while (minDate < maxDate){
filledInDates.push({"date":minDate, "value":currentDates[minDate] ? currentDates[minDate] : 0});
minDate = addDays(minDate, 1);
}
return filledInDates;
}

注意 here 中的 addDays 函数.

d3 来绘制此图是一个不同的故事。您现在有 5488 个条形,为了使数学运算正常(为了获得 > 0 的条形宽度),您需要将绘图宽度增加到 10,000 像素。

查看更新fiddle .

关于javascript - D3 填充日期和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com