Skip to content

Commit

Permalink
fix: handle empty set or null values
Browse files Browse the repository at this point in the history
  • Loading branch information
farfromrefug committed Jan 20, 2020
1 parent 62e29c6 commit b1eef1e
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 56 deletions.
6 changes: 6 additions & 0 deletions src/charting/components/AxisBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,12 @@ export abstract class AxisBase extends ComponentBase {
max = max + 1;
min = min - 1;
}
if (!Number.isFinite(min)) {
min = 0;
}
if (!Number.isFinite(max)) {
max = 0;
}

this.mAxisMinimum = min;
this.mAxisMaximum = max;
Expand Down
56 changes: 34 additions & 22 deletions src/charting/data/ChartData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
/**
* maximum y-value in the value array across all axes
*/
mYMax = -Number.MAX_VALUE;
mYMax = -Infinity;

/**
* the minimum y-value in the value array across all axes
*/
mYMin = Number.MAX_VALUE;
mYMin = Infinity;

/**
* maximum x-value in the value array
*/
mXMax = -Number.MAX_VALUE;
mXMax = -Infinity;

/**
* minimum x-value in the value array
*/
mXMin = Number.MAX_VALUE;
mXMin = Infinity;

mLeftAxisMax = -Number.MAX_VALUE;
mLeftAxisMax = -Infinity;

mLeftAxisMin = Number.MAX_VALUE;
mLeftAxisMin = Infinity;

mRightAxisMax = -Number.MAX_VALUE;
mRightAxisMax = -Infinity;

mRightAxisMin = Number.MAX_VALUE;
mRightAxisMin = Infinity;

/**
* array that holds all DataSets the ChartData object represents
Expand Down Expand Up @@ -112,10 +112,10 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
protected calcMinMax() {
if (this.mDataSets == null) return;

this.mYMax = -Number.MAX_VALUE;
this.mYMin = Number.MAX_VALUE;
this.mXMax = -Number.MAX_VALUE;
this.mXMin = Number.MAX_VALUE;
this.mYMax = -Infinity;
this.mYMin = Infinity;
this.mXMax = -Infinity;
this.mXMin = Infinity;

const visibleDatasets = this.getVisibleDataSets();

Expand All @@ -125,10 +125,10 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
}
}

this.mLeftAxisMax = -Number.MAX_VALUE;
this.mLeftAxisMin = Number.MAX_VALUE;
this.mRightAxisMax = -Number.MAX_VALUE;
this.mRightAxisMin = Number.MAX_VALUE;
this.mLeftAxisMax = -Infinity;
this.mLeftAxisMin = Infinity;
this.mRightAxisMax = -Infinity;
this.mRightAxisMin = Infinity;

// left axis
const firstLeft = this.getFirstLeft(visibleDatasets);
Expand Down Expand Up @@ -186,11 +186,17 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
return this.mYMin;
}
if (axis == AxisDependency.LEFT) {
if (this.mLeftAxisMin == Number.MAX_VALUE) {
if (!Number.isFinite(this.mLeftAxisMin)) {
if (!Number.isFinite(this.mRightAxisMin)) {
return 0;
}
return this.mRightAxisMin;
} else return this.mLeftAxisMin;
} else {
if (this.mRightAxisMin == Number.MAX_VALUE) {
if (!Number.isFinite(this.mRightAxisMin)) {
if (!Number.isFinite(this.mLeftAxisMin)) {
return 0;
}
return this.mLeftAxisMin;
} else return this.mRightAxisMin;
}
Expand All @@ -207,11 +213,17 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
return this.mYMax;
}
if (axis == AxisDependency.LEFT) {
if (this.mLeftAxisMax == -Number.MAX_VALUE) {
if (!Number.isFinite(this.mLeftAxisMax)) {
if (!Number.isFinite(this.mRightAxisMax)) {
return 0;
}
return this.mRightAxisMax;
} else return this.mLeftAxisMax;
} else {
if (this.mRightAxisMax == -Number.MAX_VALUE) {
if (!Number.isFinite(this.mRightAxisMax)) {
if (!Number.isFinite(this.mLeftAxisMax)) {
return 0;
}
return this.mLeftAxisMax;
} else return this.mRightAxisMax;
}
Expand Down Expand Up @@ -260,9 +272,9 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
*/
protected getDataSetIndexByLabel(dataSets, label, ignorecase) {
if (ignorecase) {
for (let i = 0; i < dataSets.length; i++) if (label.equalsIgnoreCase(dataSets.get(i).getLabel())) return i;
for (let i = 0; i < dataSets.length; i++) if (label.equalsIgnoreCase(dataSets[i].getLabel())) return i;
} else {
for (let i = 0; i < dataSets.length; i++) if (label.equals(dataSets.get(i).getLabel())) return i;
for (let i = 0; i < dataSets.length; i++) if (label.equals(dataSets[i].getLabel())) return i;
}

return -1;
Expand Down
18 changes: 9 additions & 9 deletions src/charting/data/CombinedData.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@ public calcMinMax() {
}
this.mDataSets.clear();

this.mYMax = -Number.MAX_VALUE;
this.mYMin = Number.MAX_VALUE;
this.mXMax = -Number.MAX_VALUE;
this.mXMin = Number.MAX_VALUE;

this.mLeftAxisMax = -Number.MAX_VALUE;
this.mLeftAxisMin = Number.MAX_VALUE;
this.mRightAxisMax = -Number.MAX_VALUE;
this.mRightAxisMin = Number.MAX_VALUE;
this.mYMax = -Infinity;
this.mYMin = Infinity;
this.mXMax = -Infinity;
this.mXMin = Infinity;

this.mLeftAxisMax = -Infinity;
this.mLeftAxisMin = Infinity;
this.mRightAxisMax = -Infinity;
this.mRightAxisMin = Infinity;

List<BarLineScatterCandleBubbleData> allData = getAllData();

Expand Down
28 changes: 14 additions & 14 deletions src/charting/data/DataSet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,22 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
/**
* maximum y-value in the value array
*/
protected mYMax = -Number.MAX_VALUE;
protected mYMax = -Infinity;

/**
* minimum y-value in the value array
*/
protected mYMin = Number.MAX_VALUE;
protected mYMin = Infinity;

/**
* maximum x-value in the value array
*/
protected mXMax = -Number.MAX_VALUE;
protected mXMax = -Infinity;

/**
* minimum x-value in the value array
*/
protected mXMin = Number.MAX_VALUE;
protected mXMin = Infinity;

/**
* Creates a new DataSet object with the given values (entries) it represents. Also, a
Expand All @@ -65,10 +65,10 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
calcMinMax() {
if (this.mValues == null || this.mValues.length === 0) return;

this.mYMax = -Number.MAX_VALUE;
this.mYMin = Number.MAX_VALUE;
this.mXMax = -Number.MAX_VALUE;
this.mXMin = Number.MAX_VALUE;
this.mYMax = -Infinity;
this.mYMin = Infinity;
this.mXMax = -Infinity;
this.mXMin = Infinity;

for (let e of this.mValues) {
this.calcMinMaxForEntry(e);
Expand All @@ -78,8 +78,8 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
public calcMinMaxYRange(fromX, toX) {
if (this.mValues == null || this.mValues.length === 0) return;

this.mYMax = -Number.MAX_VALUE;
this.mYMin = Number.MAX_VALUE;
this.mYMax = -Infinity;
this.mYMin = Infinity;

let indexFrom = this.getEntryIndexForXValue(fromX, NaN, Rounding.DOWN);
let indexTo = this.getEntryIndexForXValue(toX, NaN, Rounding.UP);
Expand All @@ -106,10 +106,10 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
if (!e) {
if (this.mValues == null || this.mValues.length === 0) return;

this.mYMax = -Number.MAX_VALUE;
this.mYMin = Number.MAX_VALUE;
this.mXMax = -Number.MAX_VALUE;
this.mXMin = Number.MAX_VALUE;
this.mYMax = -Infinity;
this.mYMin = Infinity;
this.mXMax = -Infinity;
this.mXMin = Infinity;

for (let e of this.mValues) {
this.calcMinMaxForEntry(e);
Expand Down
2 changes: 1 addition & 1 deletion src/charting/highlight/ChartHighlighter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export class ChartHighlighter<T extends BarLineScatterCandleBubbleDataProvider>
* @return
*/
protected getMinimumDistance(closestValues: Highlight[], pos, axis) {
let distance = Number.MAX_VALUE;
let distance = Infinity;

for (let i = 0; i < closestValues.length; i++) {
const high = closestValues[i];
Expand Down
2 changes: 1 addition & 1 deletion src/charting/highlight/CombinedHighlighter.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ protected List<Highlight> getHighlightsAtXValue(let xVal, let x, let y) {
// protected Highlight getClosest(let x, let y, Highlight... highs) {
//
// Highlight closest = null;
// let minDistance = Number.MAX_VALUE;
// let minDistance = Infinity;
//
// for (Highlight high : highs) {
//
Expand Down
2 changes: 1 addition & 1 deletion src/charting/highlight/RadarHighlighter.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ protected Highlight getClosestHighlight(let index, let x, let y) {
let distanceToCenter = this.mChart.distanceToCenter(x, y) / this.mChart.getFactor();

Highlight closest = null;
let distance = Number.MAX_VALUE;
let distance = Infinity;

for (let i = 0; i < highlights.length; i++) {

Expand Down
4 changes: 2 additions & 2 deletions src/charting/utils/Transformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ export class Transformer {
public prepareMatrixValuePx(xChartMin, deltaX, deltaY, yChartMin) {
let scaleX = this.mViewPortHandler.contentWidth() / deltaX;
let scaleY = this.mViewPortHandler.contentHeight() / deltaY;
if (!Number.isFinite(scaleX)) {
if (!Number.isFinite(scaleX) || isNaN(scaleX)) {
scaleX = 0;
}
if (!Number.isFinite(scaleY)) {
if (!Number.isFinite(scaleY) || isNaN(scaleY)) {
scaleY = 0;
}

Expand Down
12 changes: 6 additions & 6 deletions src/charting/utils/ViewPortHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export class ViewPortHandler {
/**
* maximum scale value on the y-axis
*/
private mMaxScaleY = Number.MAX_VALUE;
private mMaxScaleY = Infinity;

/**
* minimum scale value on the x-axis
Expand All @@ -39,7 +39,7 @@ export class ViewPortHandler {
/**
* maximum scale value on the x-axis
*/
private mMaxScaleX = Number.MAX_VALUE;
private mMaxScaleX = Infinity;

/**
* contains the current scale factor of the x-axis
Expand Down Expand Up @@ -441,7 +441,7 @@ export class ViewPortHandler {
* @param xScale
*/
public setMaximumScaleX(xScale) {
if (xScale == 0) xScale = Number.MAX_VALUE;
if (xScale == 0) xScale = Infinity;

this.mMaxScaleX = xScale;

Expand All @@ -457,7 +457,7 @@ export class ViewPortHandler {
public setMinMaxScaleX(minScaleX, maxScaleX) {
if (minScaleX < 1) minScaleX = 1;

if (maxScaleX == 0) maxScaleX = Number.MAX_VALUE;
if (maxScaleX == 0) maxScaleX = Infinity;

this.mMinScaleX = minScaleX;
this.mMaxScaleX = maxScaleX;
Expand All @@ -484,7 +484,7 @@ export class ViewPortHandler {
* @param yScale
*/
public setMaximumScaleY(yScale) {
if (yScale == 0) yScale = Number.MAX_VALUE;
if (yScale == 0) yScale = Infinity;

this.mMaxScaleY = yScale;

Expand All @@ -494,7 +494,7 @@ export class ViewPortHandler {
public setMinMaxScaleY(minScaleY, maxScaleY) {
if (minScaleY < 1) minScaleY = 1;

if (maxScaleY == 0) maxScaleY = Number.MAX_VALUE;
if (maxScaleY == 0) maxScaleY = Infinity;

this.mMinScaleY = minScaleY;
this.mMaxScaleY = maxScaleY;
Expand Down

0 comments on commit b1eef1e

Please sign in to comment.