chart = {
const dataset = [
{start: new Date("2019-09-23 1:00 AM"), target: 70},
{start: new Date("2019-09-23 8:00 AM"), target: 75},
{start: new Date("2019-09-23 9:00 PM"), target: 70},
{start: new Date("2019-09-23 1:00 PM"), target: 75},
{start: new Date("2019-09-23 5:00 PM"), target: 70},
{start: new Date("2019-09-23 6:00 PM"), target: 65},
]
var xScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function(d) {
return d.x_pos
})]).range([0, width]);
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height])
.attr("stroke-width", 2);
const axis = svg.append("g")
.attr('id', 'xAxis')
.call(xAxis)
function drawCircleGroups(dataset) {
const circleContainer = svg.append('g').attr('id','circleContainer')
var group = circleContainer.selectAll('g')
.data(dataset)
.enter()
.append("g")
.attr('id', d => d.target)
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended))
.on("click", removeElement);
group.append("circle")
.attr("cx", d => x(d.start))
.attr("cy", 55)
.attr("r", 30)
.attr("fill", "red")
group.append("text")
.attr("x", function(d) { return x(d.start) - 10; })
.attr("y", function(d) { return 60; })
.style("fill", "white")
.text(function(d) { return d.target })
}
drawCircleGroups(dataset)
axis.on("click", function() {
var coords = d3.mouse(this);
console.log("x is ", x.invert(d3.event.x))
var newData = {
start: x.invert(d3.event.x),
target: 0
};
console.log(newData)
dataset.push(newData);
drawCircleGroups(dataset);
})
function dragstarted(d) {
d3.select(this).raise().attr("stroke", "black");
}
function dragged(d) {
d3.select(this).selectAll('circle')
.attr("cx", d.x = d3.event.x)
.attr("cy", d.y = 55);
d3.select(this).selectAll('text')
.attr("x", d.x = d3.event.x - 10)
.attr("y", d.y = 60);
}
function dragended(d) {
d3.select(this).attr("stroke", null);
}
function removeElement(d) {
d3.event.stopPropagation()
d3.select(this)
.remove();
}
return svg.node();
}