From b936bf85307fd113fdf1445e1f13b14bf7bedb6f Mon Sep 17 00:00:00 2001 From: Perch2005 <78492631+Perch2005@users.noreply.github.com> Date: Sat, 26 Feb 2022 04:17:53 +0400 Subject: [PATCH] change differenced bar chart logic --- ...-cdn-all-in-jupyter-differenced-chart.html | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/src/whylogs/viewer/templates/index-hbs-cdn-all-in-jupyter-differenced-chart.html b/src/whylogs/viewer/templates/index-hbs-cdn-all-in-jupyter-differenced-chart.html index abf9959e81..32192537ff 100644 --- a/src/whylogs/viewer/templates/index-hbs-cdn-all-in-jupyter-differenced-chart.html +++ b/src/whylogs/viewer/templates/index-hbs-cdn-all-in-jupyter-differenced-chart.html @@ -204,7 +204,10 @@

Hold on! :)

const findAndDeleteUndefined = (axisData) => { const undefinedAxisIndex = axisData.findIndex((axis) => axis === undefined) - return [...axisData.slice(0, undefinedAxisIndex), ...axisData.slice(undefinedAxisIndex + 1)] + if (undefinedAxisIndex > 0) { + return [...axisData.slice(0, undefinedAxisIndex), ...axisData.slice(undefinedAxisIndex + 1)] + } + return axisData } const filterAndSortChartData = (overlappedHistogramData, histogramData) => { @@ -246,7 +249,7 @@

Hold on! :)

this.maxYValue = d3.max(data, (d) => Math.abs(d.axisY)); this.xScale = d3 .scaleBand() - .domain(filterAndSortChartData(data, referenceData).map((sortedCounts) => sortedCounts.axisX)) + .domain(filterAndSortChartData(data, referenceData).map((sortedCounts) => sortedCounts && sortedCounts.axisX)) .rangeRound([this.MARGIN.LEFT, this.SVG_WIDTH]) .padding([0.1]); this.yScale = d3 @@ -258,21 +261,42 @@

Hold on! :)

function chartData(column) { const data = []; + if (column.stringSummary?.frequent) { Object.entries(column.stringSummary.frequent.items).forEach(([key, {value, estimate}], index) => { data.push({ axisY: estimate, axisX: value, }); }); + } else if (column.stringSummary?.charPosTracker){ + Object.entries(column.stringSummary.charPosTracker.charPosMap).forEach(([key, {count}], index) => { + data.push({ + axisY: count, + axisX: key, + }); + }); + } else { + $(document).ready(() => + $(".desktop-content").html(` +

+ Something went wrong. Please try again. +

+ `) + ) + } + return data } function generatePositiveNegativeChart(histogramData, overlappedHistogramData) { - const data = filterAndSortChartData(chartData(histogramData), chartData(overlappedHistogramData)).map((axis, index) => { - const findIndex = chartData(histogramData).findIndex((value) => value.axisX === axis.axisX) - const difference = axis.axisY - chartData(histogramData)[findIndex].axisY - return [difference] - }).flat() + const data = filterAndSortChartData(chartData(histogramData), chartData(overlappedHistogramData)).map((axis, index) => { + if (axis) { + const findIndex = chartData(histogramData).findIndex((value) => value.axisX === axis.axisX) + const difference = axis.axisY - chartData(histogramData)[findIndex].axisY + return [difference] + } + return 0; + }).flat() let yFormat, xFormat; @@ -288,13 +312,14 @@

Hold on! :)

svgEl } = sizes + const rectColors = ["bar positive", "bar negative"] const maxY = Math.abs(d3.max(data)); const minY = Math.abs(d3.min(data)); let positiveY = Math.ceil(maxY) % 1 ? maxY + 2*(maxY/(maxY*10)) : maxY + 2*(maxY/(maxY/10)), negativeY = Math.ceil(minY) % 1 ? minY + 2*(minY/(minY*10)) : minY + 2*(minY/(minY/10)); const yScale = d3.scaleLinear() - .domain([-negativeY, positiveY ]) + .domain([-negativeY, positiveY || 0]) .range([CHART_HEIGHT,0]) const xAxis = d3.axisBottom(xScale).ticks(SVG_WIDTH / 80, xFormat).tickSizeOuter(0); @@ -314,15 +339,15 @@

Hold on! :)

.attr("fill", "currentColor") .attr("text-anchor", "start")); - svgEl.append("text") + svgEl.append("text") .attr("transform", - "translate(" + (CHART_WIDTH/2) + " ," + + "translate(" + (CHART_WIDTH/2) + " ," + (CHART_HEIGHT + MARGIN.TOP + 30) + ")") .style("text-anchor", "middle") .text("Values") .style("font-size", "15") .style("opacity", "0.6") - + svgEl.append("text") .attr("transform", "rotate(-90)") .attr("y", 0) @@ -330,7 +355,7 @@

Hold on! :)

.attr("dy", "1em") .style("text-anchor", "middle") .text("Counts") - .style("font-size", "15") + .style("font-size", "15") .style("opacity", "0.6") svgEl @@ -348,14 +373,14 @@

Hold on! :)

svgEl.selectAll(".bar") .data(data) .enter() - .append("g") - .attr("transform", function(d, i) { return "translate(" + xScale(filterAndSortChartData(chartData(histogramData), chartData(overlappedHistogramData))[i].axisX) + ",0)"; }) .append("rect") - .attr("class", function(d) { return d < 0 ? "bar negative" : "bar positive"; }) + .attr("class", function(d) { return d < 0 ? rectColors[0] : rectColors[1]; }) .attr("y", function(d) { return yScale(Math.max(0, d)); }) - .attr("x", function(d, i) { return xScale(i) }) + .attr("x", function(d, i) { return xScale(filterAndSortChartData(chartData(histogramData), chartData(overlappedHistogramData))[i]?.axisX) }) .attr("height", function(d) { return Math.abs(yScale(d) - yScale(0)); }) - .attr("width", xScale.bandwidth()); + .attr("width", xScale.bandwidth()) + .style("opacity", "0.8") + return svgEl._groups[0][0].outerHTML; }