aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsrichman333 <sarah_n_richman@brown.edu>2023-07-26 23:09:28 -0400
committersrichman333 <sarah_n_richman@brown.edu>2023-07-26 23:09:28 -0400
commit16d543ae2c2c3b2beca593db7ec503af88ee727b (patch)
treec04ef0b11810e5240bd09123f29486d7e68f6c14 /src
parent3a177316c1f104da538ed4a53c6a442c6f3fcdc4 (diff)
clicking on histogram data fix
Diffstat (limited to 'src')
-rw-r--r--src/client/views/nodes/DataVizBox/components/Histogram.tsx38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/client/views/nodes/DataVizBox/components/Histogram.tsx b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
index 5fbe92563..7b9eba1cd 100644
--- a/src/client/views/nodes/DataVizBox/components/Histogram.tsx
+++ b/src/client/views/nodes/DataVizBox/components/Histogram.tsx
@@ -37,7 +37,6 @@ export class Histogram extends React.Component<HistogramProps> {
private _disposers: { [key: string]: IReactionDisposer } = {};
private _histogramRef: React.RefObject<HTMLDivElement> = React.createRef();
private _histogramSvg: d3.Selection<SVGGElement, unknown, null, undefined> | undefined;
- private numericalData: boolean = false;
private numericalXData: boolean = false; // whether the data is organized by numbers rather than categoreis
private numericalYData: boolean = false; // whether the y axis is controlled by provided data rather than frequency
private maxBins = 15; // maximum number of bins that is readable on a normal sized doc
@@ -261,19 +260,19 @@ export class Histogram extends React.Component<HistogramProps> {
return valid;
});
if (!this.numericalXData) {
- var histStringDataSet: { frequency: any, label: any }[] = [];
+ var histStringDataSet: { [x: string]: unknown; }[] = [];
if (this.numericalYData){
for (let i=0; i<dataSet.length; i++){
- histStringDataSet.push({frequency: dataSet[i][yAxisTitle], label: dataSet[i][xAxisTitle]})
+ histStringDataSet.push({[yAxisTitle]: dataSet[i][yAxisTitle], [xAxisTitle]: dataSet[i][xAxisTitle]})
}
}
else{
for (let i=0; i<uniqueArr.length; i++){
- histStringDataSet.push({frequency: 0, label: uniqueArr[i]})
+ histStringDataSet.push({[yAxisTitle]: 0, [xAxisTitle]: uniqueArr[i]})
}
for (let i=0; i<data.length; i++){
- let sliceData = histStringDataSet.filter(each => each.label==data[i])
- sliceData[0].frequency = sliceData[0].frequency + 1;
+ let sliceData = histStringDataSet.filter(each => each[xAxisTitle]==data[i])
+ sliceData[0][yAxisTitle] = sliceData[0][yAxisTitle] + 1;
}
}
histDataSet = histStringDataSet
@@ -331,7 +330,7 @@ export class Histogram extends React.Component<HistogramProps> {
xAxis = d3.axisBottom(x)
.ticks(numBins-1)
}
- const maxFrequency = this.numericalYData? d3.max(histDataSet, function(d) {return d.frequency.replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '')})
+ const maxFrequency = this.numericalYData? d3.max(histDataSet, function(d) { return d[yAxisTitle].replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '')})
: d3.max(bins, function(d) { return d.length; })
var y = d3.scaleLinear()
@@ -347,16 +346,13 @@ export class Histogram extends React.Component<HistogramProps> {
const onPointClick = action((e: any) => {
var pointerX = d3.pointer(e)[0];
- var index = -1;
var sameAsCurrent: boolean;
const selected = svg.selectAll('.histogram-bar').filter((d: any) => {
- index++;
- var left = this.numericalData? d.x0-1: d.x0;
- var right = (this.numericalData && d.x0!=d.x1)? d.x1-1: d.x1;
- if ((left*eachRectWidth ) <= pointerX && pointerX <= (right*eachRectWidth )){
- var showSelected = histDataSet[index]
- var selectedDisplay = {[xAxisTitle]: showSelected.label, [yAxisTitle]: showSelected.frequency}
- // showSelected['frequency'] = d.length;
+ var left = this.numericalXData? d.x0-1: d.x0;
+ var right = (this.numericalXData && d.x0!=d.x1)? d.x1-1: d.x1;
+ if ((left*eachRectWidth ) <= pointerX && pointerX <= (right*eachRectWidth)){
+ var showSelected = histDataSet.filter((data: { [x: string]: any; }) => data[xAxisTitle]==d[0])[0];
+ var selectedDisplay = {[xAxisTitle]: showSelected[xAxisTitle], [yAxisTitle]: this.numericalXData? d.length : showSelected[yAxisTitle]}
sameAsCurrent = this._currSelected?
(selectedDisplay[xAxisTitle]==this._currSelected![xAxisTitle]
&& selectedDisplay[yAxisTitle]==this._currSelected![yAxisTitle])
@@ -366,7 +362,6 @@ export class Histogram extends React.Component<HistogramProps> {
}
return false;
});
- // selected.attr('class')=='histogram-bar hover'? selected.attr('class', 'histogram-bar'): selected.attr('class', 'histogram-bar hover')
const elements = document.querySelectorAll('.histogram-bar');
for (let i = 0; i < elements.length; i++) {
elements[i].classList.remove('hover');
@@ -392,17 +387,18 @@ export class Histogram extends React.Component<HistogramProps> {
.append("rect")
.attr("transform", this.numericalYData?
function (d) {
- var eachData = histDataSet.filter((data: { label: number; }) => {return data.label==d[0]})
- var length = eachData[0].frequency.replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '');
+ var eachData = histDataSet.filter((data: { [x: string]: number; }) => {return data[xAxisTitle]==d[0]})
+ var length = eachData[0][yAxisTitle].replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '');
return "translate(" + x(d.x0!) + "," + y(length) + ")";
}
: function(d) { return "translate(" + x(d.x0!) + "," + y(d.length) + ")"; })
.attr("height", this.numericalYData?
function(d) {
- var eachData = histDataSet.filter((data: { label: number; }) => {return data.label==d[0]})
- var length = eachData[0].frequency.replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '');
+ var eachData = histDataSet.filter((data: { [x: string]: number; }) => {return data[xAxisTitle]==d[0]})
+ var length = eachData[0][yAxisTitle].replace(/\$/g, '').replace(/\%/g, '').replace(/\</g, '');
return height-y(length)}
- : function(d) { return height - y(d.length)})
+ : function(d) {
+ return height - y(d.length)})
.attr("width", eachRectWidth)
.attr("class", 'histogram-bar')
};