From 804a61d0fb3de5c0ba00fc4af27ca03fb454d3eb Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Tue, 30 Sep 2014 10:16:15 +0200 Subject: [PATCH] bugfix Issue #83 - Bad signatures on axis (numbers should be rounded) --- .../chartpart/AxisTickBarChartCalculator.java | 32 ++++++------------- .../AxisTickNumericalCalculator.java | 2 ++ .../internal/chartpart/NumberFormatter.java | 1 + 3 files changed, 13 insertions(+), 22 deletions(-) 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 558cc321..e70a6e3c 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 @@ -131,36 +131,24 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { tickLocations.add(tickLabelPosition); } } - else { // Number or Date and more than 12 categories. divide up the axis tick space according to normal number axis layout - - double gridStep = getNumericalGridStep(tickSpace); - double firstPosition = getFirstPosition(gridStep); + else { // Number or Date and more than 12 categories. divide up the axis tick space according to normal date oor number axis layout // generate all tickLabels and tickLocations from the first to last position - NumberFormatter numberFormatter = null; - DateFormatter dateFormatter = null; if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { - numberFormatter = new NumberFormatter(styleManager); + + AxisTickNumericalCalculator axisTickNumericalCalculator = new AxisTickNumericalCalculator(axisDirection, workingSpace, minValue, maxValue, styleManager); + tickLabels = axisTickNumericalCalculator.getTickLabels(); + tickLocations = axisTickNumericalCalculator.getTickLocations(); + } else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) { - dateFormatter = new DateFormatter(chartPainter.getStyleManager()); - } - - for (double tickPosition = firstPosition; tickPosition <= maxValue + 2 * gridStep; tickPosition = tickPosition + gridStep) { - if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { - tickLabels.add(numberFormatter.formatNumber(BigDecimal.valueOf(tickPosition), minValue, maxValue, axisDirection)); - } - else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Date) { - long span = (long) Math.abs(maxValue - minValue); // in data space - long gridStepHint = (long) (span / (double) tickSpace * styleManager.getXAxisTickMarkSpacingHint()); - long timeUnit = dateFormatter.getTimeUnit(gridStepHint); - tickLabels.add(dateFormatter.formatDate(tickPosition, timeUnit)); - } - double tickLabelPosition = margin + ((tickPosition - minValue) / (maxValue - minValue) * tickSpace); - tickLocations.add(tickLabelPosition); + AxisTickDateCalculator axisTickDateCalculator = new AxisTickDateCalculator(axisDirection, workingSpace, minValue, maxValue, styleManager); + tickLabels = axisTickDateCalculator.getTickLabels(); + tickLocations = axisTickDateCalculator.getTickLocations(); } + } } 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 48d6efb9..fdbad410 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 @@ -74,8 +74,10 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { // generate all tickLabels and tickLocations from the first to last position for (BigDecimal tickPosition = cleanedFirstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + 2 * cleanedGridStep.doubleValue())) < 0; tickPosition = tickPosition.add(cleanedGridStep)) { + // System.out.println(tickPosition); String tickLabel = numberFormatter.formatNumber(tickPosition, minValue, maxValue, axisDirection); // System.out.println(tickLabel); + tickLabels.add(tickLabel); // here we convert tickPosition finally to plot space, i.e. pixels double tickLabelPosition = margin + ((tickPosition.doubleValue() - minValue) / (maxValue - minValue) * tickSpace); 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 750f538b..2264d2d0 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 @@ -133,6 +133,7 @@ public class NumberFormatter { else { decimalPattern = getFormatPattern(value, min, max); } + // System.out.println(decimalPattern); DecimalFormat normalFormat = (DecimalFormat) numberFormat; normalFormat.applyPattern(decimalPattern); -- GitLab