diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java index db89c5f4a36476682e1ce3fcc5974e4c09b1125f..b9db53f76153a9632368e7de0663d63d2e54a8a7 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java @@ -73,7 +73,7 @@ public class BarChart02 implements ExampleChart { e.printStackTrace(); } xData.add(date); - yData.add(-1 * ((random.nextInt(i) + 1))); + yData.add(-1 * 0.00000001 * ((random.nextInt(i) + 1))); } Series series = chart.addSeries("Model 77", xData, yData); series.setLineColor(SeriesColor.RED); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java index cf9160b8530cb084900fd778e1c868e6f8f2b982..dbb32958ee0a52e28a6bfe7d90cb4c2f064638bf 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java @@ -64,7 +64,7 @@ public class DateChart03 implements ExampleChart { // System.out.println(date.getTime()); // System.out.println(date.toString()); xData.add(date); - yData.add(Math.random() * i); + yData.add(Math.random() * i * 1000000000); } chart.addSeries("blah", xData, yData); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java index 61dda3980cd3fb1ee3e31fd715caab293a711c81..1fb2b3ea4ffcbaba8cede8ac143c674b1ac2fa2a 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java @@ -52,7 +52,7 @@ public class ScatterChart01 implements ExampleChart { Random random = new Random(); int size = 1000; for (int i = 0; i < size; i++) { - xData.add(random.nextGaussian()); + xData.add(random.nextGaussian() / 1000); yData.add(-1000000 + random.nextGaussian()); } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart04.java index 99a17fce522b92915333edaa114644dd3c675090..fb8eb1e67acd792f840933108c4bfaa548c07735 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart04.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart04.java @@ -51,11 +51,11 @@ public class ScatterChart04 implements ExampleChart { // generates data int size = 10; - List<Integer> xData = new ArrayList<Integer>(); + List<Double> xData = new ArrayList<Double>(); List<Double> yData = new ArrayList<Double>(); List<Double> errorBars = new ArrayList<Double>(); for (int i = 0; i <= size; i++) { - xData.add(i); + xData.add(((double) i) / 100000000); yData.add(10 * Math.exp(-i)); errorBars.add(Math.random() + .3); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java index bc2242e227b2d6ebf547cff31b51e78e178f75f2..6d64fa151f42ad59af0ade8adb365fd9a13aa775 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java @@ -15,6 +15,7 @@ */ package com.xeiam.xchart.internal.chartpart; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; @@ -27,14 +28,14 @@ import com.xeiam.xchart.internal.chartpart.Axis.Direction; /** * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for decimal axes - * + * * @author timmolter */ public class AxisTickBarChartCalculator extends AxisTickCalculator { /** * Constructor - * + * * @param axisDirection * @param workingSpace * @param minValue @@ -118,7 +119,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { for (Object category : categories) { if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { - tickLabels.add(numberFormatter.formatNumber((Double) category, minValue, maxValue)); + tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf((Double) category), minValue, maxValue)); } else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) { long span = (long) Math.abs(maxValue - minValue); // in data space @@ -149,7 +150,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { for (double tickPosition = firstPosition; tickPosition <= maxValue; tickPosition = tickPosition + gridStep) { if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { - tickLabels.add(numberFormatter.formatNumber(tickPosition, minValue, maxValue)); + tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf(tickPosition), minValue, maxValue)); } else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) { long span = (long) Math.abs(maxValue - minValue); // in data space diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java index 771a6f2424166d3f7233db16d423c1816216f827..0c4627b47a0694d0e8d55761933bf7a8117bd047 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java @@ -15,13 +15,15 @@ */ package com.xeiam.xchart.internal.chartpart; +import java.math.BigDecimal; + import com.xeiam.xchart.StyleManager; import com.xeiam.xchart.internal.Utils; import com.xeiam.xchart.internal.chartpart.Axis.Direction; /** * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for logarithmic axes - * + * * @author timmolter */ public class AxisTickLogarithmicCalculator extends AxisTickCalculator { @@ -30,7 +32,7 @@ public class AxisTickLogarithmicCalculator extends AxisTickCalculator { /** * Constructor - * + * * @param axisDirection * @param workingSpace * @param minValue @@ -48,7 +50,7 @@ public class AxisTickLogarithmicCalculator extends AxisTickCalculator { // a check if all axis data are the exact same values if (minValue == maxValue) { - tickLabels.add(numberFormatter.formatNumber(maxValue, minValue, maxValue)); + tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf(maxValue), minValue, maxValue)); tickLocations.add(workingSpace / 2.0); return; } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java index 89d5d6f4aa4bb5a67657dec7f9d6407621a7e779..d5fcf6c6a01e5c0b7a5f252436dde46824c584ca 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java @@ -24,7 +24,7 @@ import com.xeiam.xchart.internal.chartpart.Axis.Direction; /** * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for decimal axes - * + * * @author timmolter */ public class AxisTickNumericalCalculator extends AxisTickCalculator { @@ -33,7 +33,7 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { /** * Constructor - * + * * @param axisDirection * @param workingSpace * @param minValue @@ -51,7 +51,7 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { // a check if all axis data are the exact same values if (minValue == maxValue) { - tickLabels.add(numberFormatter.formatNumber(maxValue, minValue, maxValue)); + tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf(maxValue), minValue, maxValue)); tickLocations.add(workingSpace / 2.0); return; } @@ -63,14 +63,19 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { double margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace); BigDecimal gridStep = BigDecimal.valueOf(getNumericalGridStep(tickSpace)); - BigDecimal firstPosition = BigDecimal.valueOf(getFirstPosition(gridStep.doubleValue())); - BigDecimal scaledfirstPosition = firstPosition.setScale(16, RoundingMode.HALF_UP); - // System.out.println("scaledfirstPosition: " + scaledfirstPosition); // chop off any double imprecision + // System.out.println("***gridStep: " + gridStep); + BigDecimal cleanedGridStep = gridStep.setScale(16, RoundingMode.HALF_UP); // chop off any double imprecision + // System.out.println("cleanedGridStep: " + cleanedGridStep); + BigDecimal firstPosition = BigDecimal.valueOf(getFirstPosition(cleanedGridStep.doubleValue())); + // System.out.println("firstPosition: " + firstPosition); // chop off any double imprecision + BigDecimal cleanedFirstPosition = firstPosition.setScale(16, RoundingMode.HALF_UP); // chop off any double imprecision + // System.out.println("scaledfirstPosition: " + cleanedFirstPosition); // generate all tickLabels and tickLocations from the first to last position - for (BigDecimal tickPosition = scaledfirstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + gridStep.doubleValue() * 0.2)) <= 0; tickPosition = tickPosition.add(gridStep)) { + for (BigDecimal tickPosition = cleanedFirstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + cleanedGridStep.doubleValue() * 0.2)) <= 0; tickPosition = + tickPosition.add(cleanedGridStep)) { - tickLabels.add(numberFormatter.formatNumber(tickPosition.doubleValue(), minValue, maxValue)); + tickLabels.add(numberFormatter.formatNumber(tickPosition, minValue, maxValue)); // here we convert tickPosition finally to plot space, i.e. pixels double tickLabelPosition = margin + ((tickPosition.doubleValue() - minValue) / (maxValue - minValue) * tickSpace); tickLocations.add(tickLabelPosition); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java index 8d11b790ba7b9be0197770e4bb88e0c0f3857708..5685df93065350addc032e5ccf409050d174ba97 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java @@ -15,6 +15,7 @@ */ package com.xeiam.xchart.internal.chartpart; +import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; @@ -35,7 +36,7 @@ public class NumberFormatter { this.styleManager = styleManager; } - public String getFormatPattern(double value, double min, double max) { + public String getFormatPattern(BigDecimal value, double min, double max) { // System.out.println("value: " + value); // System.out.println("min: " + min); @@ -50,11 +51,11 @@ public class NumberFormatter { placeOfDifference = (int) Math.floor(Math.log(difference) / Math.log(10)); } int placeOfValue; - if (value == 0.0) { + if (value.doubleValue() == 0.0) { placeOfValue = 0; } else { - placeOfValue = (int) Math.floor(Math.log(value) / Math.log(10)); + placeOfValue = (int) Math.floor(Math.log(value.doubleValue()) / Math.log(10)); } // System.out.println("difference: " + difference); @@ -104,11 +105,11 @@ public class NumberFormatter { /** * Format a number value, if the override patterns are null, it uses defaults - * + * * @param value * @return */ - public String formatNumber(double value, double min, double max) { + public String formatNumber(BigDecimal value, double min, double max) { NumberFormat numberFormat = NumberFormat.getNumberInstance(styleManager.getLocale()); @@ -130,7 +131,7 @@ public class NumberFormatter { /** * Format a log number value for log Axes which show only decade tick labels. if the override patterns are null, it uses defaults - * + * * @param value * @return */ diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java index f7783afef9d16177b5f7e988541979f8da9d79e5..27f39f03e0891288555d54924c81ad0678683185 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java @@ -37,7 +37,7 @@ public class PlotContentLineChart extends PlotContent { /** * Constructor - * + * * @param plot */ protected PlotContentLineChart(Plot plot) { @@ -66,6 +66,7 @@ public class PlotContentLineChart extends PlotContent { // data points Collection<?> xData = series.getXData(); + // System.out.println(xData); double xMin = getChartPainter().getAxisPair().getXAxis().getMin(); double xMax = getChartPainter().getAxisPair().getXAxis().getMax();