aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/views/nodes/DataVizBox/components/Histogram.tsx50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/client/views/nodes/DataVizBox/components/Histogram.tsx b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
index c7850d8c1..623453ea3 100644
--- a/src/client/views/nodes/DataVizBox/components/Histogram.tsx
+++ b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
@@ -14,7 +14,6 @@ import { PinProps, PresBox } from "../../trails";
import { Docs } from "../../../../documents/Documents";
import { List } from "../../../../../fields/List";
import './Chart.scss';
-import { minMaxRange } from "../utils/D3Utils";
import e from "connect-flash";
export interface HistogramProps {
@@ -245,9 +244,17 @@ export class Histogram extends React.Component<HistogramProps> {
let uniqueArr = [...new Set(data)]
var numBins = uniqueArr.length
- if (this.numericalData) numBins = this.rangeVals.xMax! - this.rangeVals.xMin! + 1;
- var startingPoint = this.numericalData==true? this.rangeVals.xMin: 0;
- console.log(startingPoint)
+ var startingPoint = 0;
+ var endingPoint = numBins;
+ var translateXAxis = 0;
+ if (this.numericalData) {
+ numBins = this.rangeVals.xMax! - this.rangeVals.xMin! + 1;
+ startingPoint = this.rangeVals.xMin!;
+ endingPoint = this.rangeVals.xMax!;
+ if (numBins>15) numBins = 15;
+ else translateXAxis = width/(numBins+1) / 2;
+ }
+ else translateXAxis = width/(numBins+1) / 2;
const svg = (this._histogramSvg = d3
.select(this._histogramRef.current)
@@ -262,28 +269,27 @@ export class Histogram extends React.Component<HistogramProps> {
var x: any;
if (this.numericalData){
x = d3.scaleLinear()
- .domain([this.rangeVals.xMin!, this.rangeVals.xMax!])
- .range([0, width-(width/numBins)]);
+ .domain([startingPoint!, endingPoint!])
+ .range([0, width ]);
}
else {
x = d3.scaleLinear()
.domain([0, numBins])
.range([0, width]);
}
-
- var xAxis = d3.axisBottom(x)
- .ticks(numBins-1)
- var translateXAxis = (width/numBins) / 2;
var histogram = d3.histogram()
.value(function(d) {return d})
- .domain([startingPoint!, numBins+startingPoint!])
+ .domain([startingPoint!, endingPoint!])
.thresholds(x.ticks(numBins))
var bins = histogram(data)
- console.log(this._histogramData)
- console.log(data)
- console.log(bins)
- console.log(this.rangeVals.xMin, this.rangeVals.xMax, numBins)
+ var eachRectWidth = width/(bins.length)
+ var graphStartingPoint = bins[0].x1! - (bins[1].x1! - bins[1].x0!)
+ bins[0].x0 = graphStartingPoint;
+ x = x.domain([graphStartingPoint, endingPoint])
+ .range([0, width - eachRectWidth])
+ var xAxis;
+
if (!this.numericalData) { // if the data is strings rather than numbers
uniqueArr.sort()
for (let i=0; i<data.length; i++){
@@ -300,14 +306,20 @@ export class Histogram extends React.Component<HistogramProps> {
.ticks(numBins-1)
.tickFormat( i => uniqueArr[i])
.tickPadding(10)
- translateXAxis = (width/numBins) / 2;
+ translateXAxis = eachRectWidth / 2;
+ }
+ else {
+ xAxis = d3.axisBottom(x)
+ .ticks(numBins-1)
}
+ const maxFrequency = d3.max(bins, function(d) { return d.length; })
+
var y = d3.scaleLinear()
.range([height, 0]);
- y.domain([0, d3.max(bins, function(d) { return d.length; })!]);
+ y.domain([0, maxFrequency!]);
var yAxis = d3.axisLeft(y)
- .ticks(d3.max(bins, function(d) { return d.length; })!)
+ .ticks(maxFrequency!)
svg.append("g")
.call(yAxis);
svg.append("g")
@@ -334,7 +346,7 @@ export class Histogram extends React.Component<HistogramProps> {
.append("rect")
.attr("x", 1)
.attr("transform", function(d) { return "translate(" + x(d.x0!) + "," + y(d.length) + ")"; })
- .attr("width", width/(numBins))
+ .attr("width", eachRectWidth)
.attr("height", function(d) { return height - y(d.length); })
.attr("style", "outline: thin solid black;")
.style("fill", "#69b3a2")