final_canvas4={
const height = 100;
const width = 800;
var transitionTime=500;
const ctx = DOM.context2d(width+100, height);
var dataArray=[12,15,25,38,45,51,64,87,92,112,234,345,456,567,678,789,899,999,1023,1123,1234,1345,1456,678,567,456,345,234,999];
var detachedContainer = document.createElement("custom");
var dataContainer = d3.select(detachedContainer);
function drawCustom(data) {
var allowedUnits=allowedAxisUnits(data);
var allowedUnitsDict=[];
allowedUnits.forEach(function(d){
allowedUnitsDict.push({"name":d.toString(),"value":d,"highest_value":data})
});
var dataBinding = dataContainer.selectAll("custom.ticks")
.data(allowedUnitsDict,d=>d.name);
dataBinding
.transition()
.ease(d3.easeLinear)
.duration(transitionTime)
.delay(index*transitionTime)
.attr("tickColor","rgba(252, 110, 34,0.9)")
.attr("x", function(d, i) {
return d.value;})
.attr("highest_val",d=>d.highest_value)
.attr("tickSize",7);
dataBinding
.enter()
.append("custom")
.classed("ticks", true)
.attr("tickColor","rgba(252, 110, 34,0)")
.attr("tickLabel",function(d, i) {
return d.value;
})
.attr("x", function(d, i) {
return d.value;
})
.attr("tickSize",7)
.attr("highest_val",d=>d.highest_value);
dataBinding.exit()
.transition()
.duration(transitionTime)
.delay(index*transitionTime)
.attr("tickColor","rgba(252, 110, 34,0)")
.remove();
}
function drawCanvas() {
ctx.fillStyle = "#fff";
ctx.rect(0,0,width+100,height);
ctx.fill();
ctx.beginPath();
ctx.strokeStyle="black";
ctx.moveTo(axis_rectangle[0],axis_rectangle[1]);
ctx.lineTo(axis_rectangle[2],axis_rectangle[3]-tick_length);
ctx.stroke();
var elements = dataContainer.selectAll("custom.ticks");
elements.each(function(d) {
var node = d3.select(this);
var tick_len=parseFloat(node.attr("tickSize"));
var xVal=parseFloat(node.attr("x"));
var point=scaleLin(xVal,[0,parseFloat(node.attr("highest_val"))],[axis_rectangle[0],axis_rectangle[2]]);
ctx.beginPath();
ctx.strokeStyle=node.attr("tickColor");
ctx.moveTo(point+axis_rectangle[0],axis_rectangle[1]);
ctx.lineTo(point+axis_rectangle[0],axis_rectangle[1]+tick_len);
ctx.stroke();
ctx.fillStyle = node.attr("tickColor");
ctx.font = "14px Arial";
ctx.textAlign = "center";
ctx.fillText(node.attr("tickLabel"), point+axis_rectangle[0],axis_rectangle[1]+tick_len+15);
ctx.closePath();
})
};
d3.timer(drawCanvas);
for (var index = 0; index < dataArray.length; index++) {
drawCustom(dataArray[index]);
}
return ctx.canvas;
}