class D3XYChart {
constructor(data, options) {
options.fontFamily = options.fontFamily || _defaults.fontFamily;
options.fontSize = options.fontSize || _defaults.fontSize;
options.margin = options.margin || _defaults.margin;
const barSeries = [];
const lineSeries = [];
for (const series of options.series) {
if (series.type === "bar") barSeries.push(series);
else if (series.type === "line") lineSeries.push(series);
}
const svg = d3
.create("svg")
.attr("preserveAspectRatio", "none")
.attr("viewBox", [0, 0, options.width, options.height]);
const xScales = [];
for (const xAxis of options.xAxes) {
xScales.push(buildXScale(data, options, xAxis));
}
const xClusterScale = buildXClusterScale(barSeries, xScales[0]);
const yScales = [];
for (const yAxis of options.yAxes) {
yScales.push(buildYScale(data, options, yAxis));
}
plotBarSeries(data, barSeries, svg, xScales[0], xClusterScale, yScales[0]);
for (const series of lineSeries) {
plotLineSeries(data, options, svg, series, xScales[0], yScales[0]);
plotLineSymbols(data, options, svg, series, xScales[0], yScales[0]);
}
for (const [index, xAxis] of options.xAxes.entries()) {
svg.append("g").call(buildXAxis(data, options, xAxis, xScales[index]));
}
for (const [index, yAxis] of options.yAxes.entries()) {
svg.append("g").call(buildYAxis(data, options, yAxis, yScales[index]));
}
this.chart = svg.node();
}
}