i want to create a stacked bar chart, but not the usual way with series, who get stacked.
exact data example:
[
{"issue":19,"created_at":"2017-01-06T14:24:04.247Z","time":"00:30:00"},
{"issue":18,"created_at":"2017-01-06T14:24:04.247Z","time":"02:00:00"},
{"issue":18,"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"issue":19,"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"issue":17,"created_at":"2017-01-07T14:24:04.247Z","time":"02:00:00"},
{"issue":17,"created_at":"2017-01-07T14:24:04.247Z","time":"06:00:00"},
{"issue":17,"created_at":"2017-01-08T14:24:04.247Z","time":"06:00:00"},
{"issue":17,"created_at":"2017-01-09T14:24:04.247Z","time":"06:00:00"},
{"issue":17,"created_at":"2017-01-09T14:24:04.247Z","time":"00:30:00"},
{"issue":18,"created_at":"2017-01-10T14:24:04.247Z","time":"00:10:00"},
{"issue":19,"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"issue":17,"created_at":"2017-01-10T14:24:04.247Z","time":"06:00:00"},
{"issue":19,"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"issue":19,"created_at":"2017-01-11T14:24:04.247Z","time":"00:10:00"}
]
I want to create now a stacked-bar chart for the last seven days, where values(time field) are stacked for each day and coloured by id(issue).
The Problem is all examples i found are doing series stacking
I have different amounts of values per day: 0 <= #values(day)
can someone show me a short example (http://jsfiddle.net/qbmy76on/3/) of getting a stacked bar out of this data with d3(value could also be a simple integer value, like in the following example)
with Charts.js i realized a Prototype(with minutes), but i want to switch to d3 for future Features.
{
{
"issue": 17,
times: [
{"created_at":"2017-01-07T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-08T14:24:04.247Z","time":"06:00:00"},
{"created_at":"2017-01-09T14:24:04.247Z","time":"06:00:00"},
{"created_at":"2017-01-09T14:24:04.247Z","time":"00:30:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"06:00:00"}
]
},
{
"issue": 18,
times: [
{"created_at":"2017-01-06T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"00:10:00"}
]
},
{
"issue": 19,
times:[
{"created_at":"2017-01-06T14:24:04.247Z","time":"00:30:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-11T14:24:04.247Z","time":"00:10:00"}
]
}
}
[
{
"issue": 17,
"times": [
{"created_at":"2017-01-07T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-08T14:24:04.247Z","time":"06:00:00"},
{"created_at":"2017-01-09T14:24:04.247Z","time":"06:00:00"},
{"created_at":"2017-01-09T14:24:04.247Z","time":"00:30:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"06:00:00"}
]
},
{
"issue": 18,
"times": [
{"created_at":"2017-01-06T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"00:10:00"}
]
},
{
"issue": 19,
"times":[
{"created_at":"2017-01-06T14:24:04.247Z","time":"00:30:00"},
{"created_at":"2017-01-07T14:24:04.247Z","time":"00:10:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-10T14:24:04.247Z","time":"02:00:00"},
{"created_at":"2017-01-11T14:24:04.247Z","time":"00:10:00"}
]
}
]
with your data format i can create a bar chart looking like this: https://imgur.com/LdtsusH ?
[
{
"created_at":"2017-01-06T14:24:04.247Z",
"entries": [
{"issue":19, "time":"00:30:00"},
{"issue":18, "time":"02:00:00"}
]
},
{
"created_at": "2017-01-07T14:24:04.247Z",
"entries": [
{"issue":18, "time":"00:10:00"},
{"issue":19, "time":"00:10:00"},
{"issue":17, "time":"02:00:00"},
{"issue":17, "time":"06:00:00"},
]
},
{
"created_at":"2017-01-08T14:24:04.247Z",
"entries": [
{"issue":17, "time":"06:00:00"}
]
},
{
"created_at":"2017-01-09T14:24:04.247Z",
"entries": [
{"issue":17, "time":"00:30:00"},
{"issue":17, "time":"06:00:00"}
]
},
{
"created_at":"2017-01-10T14:24:04.247Z",
"entries": [
{"issue":18, "time":"00:10:00"},
{"issue":19, "time":"02:00:00"},
{"issue":19, "time":"02:00:00"},
{"issue":17, "time":"06:00:00"}
]
},
{
"created_at":"2017-01-11T14:24:04.247Z",
"entries": {
{"issue":19, "time":"00:10:00"}
}
}
]
stack = d3.stack()
.keys(["2017-01-06", "2017-01-07", "2017-01-08", "2017-01-09", "2017-01-10", "2017-01-11"])
.order(d3.stackOrderNone)
.offset(d3.stackOffsetNone);
series = stack(data);
console.dir(series);
var grouped_by_date=[
{"key":"2017-01-07",
"values":
[ {"user":1,"issue":18,"created_at":"2017-01-07","time":10},
{"user":1,"issue":19,"created_at":"2017-01-07","time":10},
{"user":1,"issue":17,"created_at":"2017-01-07","time":120},
{"user":1,"issue":17,"created_at":"2017-01-07","time":360}
]
},
{“key":"2017-01-08",
"values":
[
{"user":1,"issue":17,"created_at":"2017-01-08","time":360}
]
},
{"key":"2017-01-09",
"values":
[
{"user":1,"issue":17,"created_at":"2017-01-09","time":360},
{"user":1,"issue":17,"created_at":"2017-01-09","time":30}
]
},
{"key":"2017-01-10",
"values":
[
{"user":1,"issue":18,"created_at":"2017-01-10","time":10},
{"user":1,"issue":19,"created_at":"2017-01-10","time":120},
{"user":1,"issue":17,"created_at":"2017-01-10","time":360},
{"user":1,"issue":19,"created_at":"2017-01-10","time":120}
]
},
{"key":"2017-01-11","values":
[
{"user":1,"issue":19,"created_at":"2017-01-11","time":10}
]
}
]
then i do
var stack = d3.stack()
.keys("2017-01-07", "2017-01-08", "2017-01-09", "2017-01-10", "2017-01-11"])
.value(function(d, key) { return d.values.time; })
.order(d3.stackOrderNone)
.offset(d3.stackOffsetNone);
series = stack(grouped_by_date);
console.dir(JSON.stringify(series));
gives me for series:
[[[0,null],[0,null],[0,null],[0,null],[0,null]],[[0,null],[0,null],[0,null],[0,null],[0,null]],[[0,null],[0,null],[0,null],[0,null],[0,null]],[[0,null],[0,null],[0,null],[0,null],[0,null]],[[0,null],[0,null],[0,null],[0,null],[0,null]],[[0,null],[0,null],[0,null],[0,null],[0,null]]]
d3.json("{% url "timelog:api_last_7_days" %}", function(error, data) { data.forEach(function(d) { d.fields.created_at = parseDate(d.fields.created_at) d.fields.created_at = formatDate(d.fields.created_at) d.fields.time = parseTime(d.fields.time) d.fields.time = d.fields.time.getHours()*60 + d.fields.time.getMinutes() }); console.log(data) var js = JSON.stringify(data, ['issue', 'created_at', 'time']) var res = []; data.forEach(function(entry) { res.push(entry.fields) }); var js = JSON.stringify(res, ['issue', 'created_at', 'time']) var grouped_by_date = d3.nest() .key(function(d) { return d.created_at; }) .entries(res); console.dir(JSON.stringify(grouped_by_date));
var stack = d3.stack() .keys(["2017-01-07", "2017-01-08", "2017-01-09", "2017-01-10", "2017-01-11", "2017-01-12", "2017-01-13"])