renderLinear = {
svgsLinear.selectAll(".cleanLinearOnInit").remove();
configuration.xAxisX = 0;
svgsLinear
.append("g")
.attr("class", "yAxisLinear" + " cleanLinearOnInit")
.style("visibility", bEnableTickMarks ? "visible" : "hidden")
.attr("transform", "translate(" + padding + ",0)")
.call(yAxisLinear);
d3.select("g.yAxisLinear")
.select("path")
.remove();
let horizontallines = svgsLinear
.selectAll(".horizontalline")
.data(yScaleLinear.ticks(5))
.enter()
.append("line")
.attr("class", "horizontalline" + " cleanLinearOnInit")
.attr("x1", function(d) {
return padding;
})
.attr("y1", function(d) {
return yScaleLinear(d);
})
.attr("x2", function(d) {
return w - padding * 2;
})
.attr("y2", function(d) {
return yScaleLinear(d);
})
.style("fill", "none")
.style("stroke", "black")
.style("visibility", bEnableDashedLine ? "visible" : "hidden")
.style("stroke-dasharray", "2,2")
.style("stroke-width", ".5px");
//Create a clipPath
svgsLinear
.append("clipPath") //Make a new clipPath
.attr("id", "chart-area") //Assign an ID
.attr("class", ".clipPathRect" + " cleanLinearOnInit")
.append("rect")
.attr("x", padding) //Set rect's position and size…
.attr("y", padding)
.attr("width", w - padding * 3)
.attr("height", h);
svgsLinear
.append("rect") //Make a new rectangle
.attr("x", padding) //Set rect's position and size…
.attr("y", padding)
.style("stroke-width", "2")
.style("storke", "rgb(0,0,0)")
.style("fill", "rgb(255,255,255)")
.style("fill-opacity", 0)
.attr("width", w - padding * 3)
.attr("height", h)
.attr("class", "linearrect" + " cleanLinearOnInit")
.attr("draggable", true)
.call(
d3
.drag()
.on('start', () => {
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
.on("drag", () => {
transformGroup(
bHorizontalWrappingConfig,
bVerticalWrappingConfig,
bDiagonalWrappingConfig,
graphics,
d3.event.x - configuration.dragStartX,
d3.event.y - configuration.dragStartY,
configuration.internalDataset
);
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
.on("end", () => {
transformGroup(
bHorizontalWrappingConfig,
bVerticalWrappingConfig,
bDiagonalWrappingConfig,
graphics,
d3.event.x - configuration.dragStartX,
d3.event.y - configuration.dragStartY,
configuration.internalDataset
);
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
);
svgGroupLinear
.attr("fill", "lightsteelblue")
.style("mix-blend-mode", "multiply")
.attr("clip-path", "url(#chart-area)") //Add reference to clipPath
.call(
d3
.drag()
.on('start', () => {
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
.on("drag", () => {
transformGroup(
bHorizontalWrappingConfig,
bVerticalWrappingConfig,
bDiagonalWrappingConfig,
graphics,
d3.event.x - configuration.dragStartX,
d3.event.y - configuration.dragStartY,
configuration.internalDataset
);
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
.on("end", () => {
transformGroup(
bHorizontalWrappingConfig,
bVerticalWrappingConfig,
bDiagonalWrappingConfig,
graphics,
d3.event.x - configuration.dragStartX,
d3.event.y - configuration.dragStartY,
configuration.internalDataset
);
configuration.dragStartX = d3.event.x;
configuration.dragStartY = d3.event.y;
})
);
//Create X axis
for (let k = 0; k < 3; k++) {
svgGroupLinear
.append("g")
.attr("class", "xAxis" + k + " cleanLinearOnInit")
.attr(
"transform",
"translate(" + shiftDistance[3 + k].x + "," + (h - padding) + ")"
)
.call(xAxisLinear);
svgGroupLinear
.selectAll("g.xAxis" + k)
.select("path")
.remove();
}
//Create bars
for (let k = 0; k < 3; k++) {
svgGroupLinear
.selectAll(".bar" + k)
.data(configuration.internalDataset)
.enter()
.append("rect")
.attr("class", "bar" + k + " cleanLinearOnInit")
.attr("x", function(d) {
return d[2] + shiftDistance[3 + k].x;
})
.attr("y", function(d) {
return yScaleLinear(d[1]);
})
.attr("height", d => yScaleLinear(0) - yScaleLinear(d[1]))
.attr("width", xScaleLinear.bandwidth());
}
return svgGroupLinear;
}