diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java index f26db94013a5286bc4eb1c9d1b22d0117b555f57..181c2fd1588a04d9ad87f03ff1a00320f1ad7078 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java @@ -36,6 +36,7 @@ import com.xeiam.xchart.style.StyleManager.ChartType; * <li>Positive values * <li>Multiple series * <li>Missing point in series + * <li>Manually setting y-axis min and max values */ public class BarChart04 implements ExampleChart { @@ -54,6 +55,9 @@ public class BarChart04 implements ExampleChart { chart.addSeries("male", new double[] { 10, 20, 30, 50 }, new double[] { 40, 30, 20, 60 }); chart.addSeries("female", new double[] { 10, 20, 30, 40, 50 }, new double[] { 50, 10, 20, 40, 35 }); + chart.getStyleManager().setyAxisMin(5); + chart.getStyleManager().setyAxisMax(70); + return chart; } } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java index 29cccef44f5f0af12a5930bf3f8818972d22806c..1acc6a6b6833258e9a0ef766e6254afeae2ed545 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java @@ -60,7 +60,7 @@ public class LineChart01 implements ExampleChart { // Customize Chart chart.getStyleManager().setChartTitleVisible(false); chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW); - chart.getStyleManager().setyAxisLogarithmic(true); + chart.getStyleManager().setYAxisLogarithmic(true); // Series Series series = chart.addSeries("10^x", xData1, yData1); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java index 42951986c34af1a040a5c0c27517a7c5a9c5e859..1dd235069b7f90f9d7d7e588f40f89a8fe5a0885 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java @@ -62,7 +62,7 @@ public class ScatterChart02 implements ExampleChart { Chart chart = new Chart(800, 600); chart.setChartTitle("Logarithmic Data"); chart.getStyleManager().setChartType(ChartType.Scatter); - chart.getStyleManager().setxAxisLogarithmic(true); + chart.getStyleManager().setXAxisLogarithmic(true); // Customize Chart chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW); diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java index de6062539a31dd95312d25f878a05610bbf99156..de59ed4f1579a52ca65f0c2d25999cd9990f7587 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Chart.java +++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java @@ -284,30 +284,6 @@ public class Chart { styleManager.setTheme(theme); } - /** - * Set the min and max value of the X axis - * - * @param min - * @param max - */ - public void setxAxisMinMax(double min, double max) { - - axisPair.getxAxis().setMinOverride(min); - axisPair.getxAxis().setMaxOverride(max); - } - - /** - * Set the min and max value of the Y axis - * - * @param min - * @param max - */ - public void setyAxisMinMax(double min, double max) { - - axisPair.getyAxis().setMinOverride(min); - axisPair.getyAxis().setMaxOverride(max); - } - // / Internal ///////////////////////////////////////// /** diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java index 9ba2412008ee441136d3346abb1996b68d872740..2d7b4e3b03a9ae7ff0aab8aaad5e9995023827c1 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java @@ -55,10 +55,6 @@ public class Axis implements ChartPart { private BigDecimal max = null; - private BigDecimal minOverride = null; - - private BigDecimal maxOverride = null; - /** the bounds */ private Rectangle bounds; @@ -240,31 +236,12 @@ public class Axis implements ChartPart { public BigDecimal getMin() { - if (minOverride == null) { - return min; - } else { - return minOverride; - } - + return min; } public BigDecimal getMax() { - if (maxOverride == null) { - return max; - } else { - return maxOverride; - } - } - - public BigDecimal getMinOverride() { - - return minOverride; - } - - public BigDecimal getMaxOverride() { - - return maxOverride; + return max; } public AxisTick getAxisTick() { @@ -292,13 +269,4 @@ public class Axis implements ChartPart { this.axisTitle = axisTitle; } - public void setMinOverride(double minOverride) { - - this.minOverride = new BigDecimal(minOverride); - } - - public void setMaxOverride(double maxOverride) { - - this.maxOverride = new BigDecimal(maxOverride); - } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java index dc677a4d341048d5c603e0ae2f5995b801ae110d..385db6db7ce7a667a15263bbc2bdc8d81813d59e 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java @@ -88,11 +88,11 @@ public class AxisTick implements ChartPart { gridStep = new BarChartAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart()); - } else if (axis.getDirection() == Axis.Direction.X && getChart().getStyleManager().isxAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { + } else if (axis.getDirection() == Axis.Direction.X && getChart().getStyleManager().isXAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); - } else if (axis.getDirection() == Axis.Direction.Y && getChart().getStyleManager().isyAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { + } else if (axis.getDirection() == Axis.Direction.Y && getChart().getStyleManager().isYAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java index f036d0ddca3e421ac6e72d433203de04b57c5aca..2e80255e4192dff2131cc43c319f5c59186429e8 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java @@ -86,7 +86,13 @@ public class PlotContentBarChart extends PlotContent { } else if (yMin.compareTo(BigDecimal.ZERO) < 0 && yMax.compareTo(BigDecimal.ZERO) < 0) { yMax = BigDecimal.ZERO; } - + // override min and maxValue if specified + if (getChart().getStyleManager().getyAxisMin() != null) { + yMin = new BigDecimal(getChart().getStyleManager().getyAxisMin()); + } + if (getChart().getStyleManager().getyAxisMax() != null) { + yMax = new BigDecimal(getChart().getStyleManager().getyAxisMax()); + } Iterator<?> categoryItr = categories.iterator(); Iterator<Number> yItr = yData.iterator(); @@ -99,7 +105,7 @@ public class PlotContentBarChart extends PlotContent { int yTransform = (int) (bounds.getHeight() - (yTopMargin + y.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace)); int yOffset = (int) (bounds.getY() + yTransform); - int zeroTransform = (int) (bounds.getHeight() - (yTopMargin + (BigDecimal.ZERO.subtract(yMin).doubleValue()) / (yMax.subtract(yMin).doubleValue()) * yTickSpace)); + int zeroTransform = (int) (bounds.getHeight() - (yTopMargin + (yMin.subtract(yMin).doubleValue()) / (yMax.subtract(yMin).doubleValue()) * yTickSpace)); int zeroOffset = (int) (bounds.getY() + zeroTransform); // paint bar 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 54d1686a906f506681a9ae66bce237abe3d278e9..f8486f9ece83c33d67c2f6359d5726d0382fc4cd 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 @@ -64,17 +64,32 @@ public class PlotContentLineChart extends PlotContent { Collection<?> xData = series.getxData(); BigDecimal xMin = getChart().getAxisPair().getxAxis().getMin(); BigDecimal xMax = getChart().getAxisPair().getxAxis().getMax(); - if (getChart().getStyleManager().isxAxisLogarithmic()) { + if (getChart().getStyleManager().isXAxisLogarithmic()) { xMin = new BigDecimal(Math.log10(xMin.doubleValue())); xMax = new BigDecimal(Math.log10(xMax.doubleValue())); } Collection<Number> yData = series.getyData(); BigDecimal yMin = getChart().getAxisPair().getyAxis().getMin(); BigDecimal yMax = getChart().getAxisPair().getyAxis().getMax(); - if (getChart().getStyleManager().isyAxisLogarithmic()) { + if (getChart().getStyleManager().isYAxisLogarithmic()) { yMin = new BigDecimal(Math.log10(yMin.doubleValue())); yMax = new BigDecimal(Math.log10(yMax.doubleValue())); } + + // override min and maxValue if specified + if (getChart().getStyleManager().getxAxisMin() != null) { + xMin = new BigDecimal(getChart().getStyleManager().getxAxisMin()); + } + if (getChart().getStyleManager().getyAxisMin() != null) { + yMin = new BigDecimal(getChart().getStyleManager().getyAxisMin()); + } + if (getChart().getStyleManager().getxAxisMax() != null) { + xMin = new BigDecimal(getChart().getStyleManager().getxAxisMax()); + } + if (getChart().getStyleManager().getyAxisMax() != null) { + yMax = new BigDecimal(getChart().getStyleManager().getyAxisMax()); + } + Collection<Number> errorBars = series.getErrorBars(); int previousX = Integer.MIN_VALUE; @@ -97,13 +112,13 @@ public class PlotContentLineChart extends PlotContent { // System.out.println(x); } - if (getChart().getStyleManager().isxAxisLogarithmic()) { + if (getChart().getStyleManager().isXAxisLogarithmic()) { x = new BigDecimal(Math.log10(x.doubleValue())); } BigDecimal y = new BigDecimal(yItr.next().doubleValue()); - if (getChart().getStyleManager().isyAxisLogarithmic()) { + if (getChart().getStyleManager().isYAxisLogarithmic()) { y = new BigDecimal(Math.log10(y.doubleValue())); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java index 827c79d1a5298bfbd0675859b247bb9d033c5401..4305f2e45555d3856177c93279f1dbd863765d7d 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java @@ -78,6 +78,19 @@ public abstract class AxisTickCalculator { overrideMaxValue = BigDecimal.ZERO; } } + // override min and maxValue if specified + if (axisDirection == Direction.X && styleManager.getxAxisMin() != null) { + overrideMinValue = new BigDecimal(styleManager.getxAxisMin()); + } + if (axisDirection == Direction.Y && styleManager.getyAxisMin() != null) { + overrideMinValue = new BigDecimal(styleManager.getyAxisMin()); + } + if (axisDirection == Direction.X && styleManager.getxAxisMax() != null) { + overrideMaxValue = new BigDecimal(styleManager.getxAxisMax()); + } + if (axisDirection == Direction.Y && styleManager.getyAxisMax() != null) { + overrideMaxValue = new BigDecimal(styleManager.getyAxisMax()); + } this.axisDirection = axisDirection; this.workingSpace = workingSpace; diff --git a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java index 9347cac4393c6689f3e60ca4edc992e46c78c17a..54c1fc178bb059a0a3030c3fa973e5af58d9dcc9 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java @@ -86,6 +86,10 @@ public class StyleManager { private int axisTitlePadding; private boolean isXAxisLogarithmic; private boolean isYAxisLogarithmic; + private Double xAxisMin; + private Double xAxisMax; + private Double yAxisMin; + private Double yAxisMax; // Chart Plot Area /////////////////////////////// private boolean isPlotGridLinesVisible; @@ -153,6 +157,10 @@ public class StyleManager { axisTitlePadding = theme.getAxisTitlePadding(); isXAxisLogarithmic = false; isYAxisLogarithmic = false; + xAxisMin = null; + xAxisMax = null; + yAxisMin = null; + yAxisMax = null; // Chart Plot Area /////////////////////////////// isPlotGridLinesVisible = theme.isPlotGridLinesVisible(); @@ -658,12 +666,12 @@ public class StyleManager { * * @param isxAxisLogarithmic */ - public void setxAxisLogarithmic(boolean isxAxisLogarithmic) { + public void setXAxisLogarithmic(boolean isXAxisLogarithmic) { - this.isXAxisLogarithmic = isxAxisLogarithmic; + this.isXAxisLogarithmic = isXAxisLogarithmic; } - public boolean isxAxisLogarithmic() { + public boolean isXAxisLogarithmic() { return isXAxisLogarithmic; } @@ -673,16 +681,56 @@ public class StyleManager { * * @param isyAxisLogarithmic */ - public void setyAxisLogarithmic(boolean isyAxisLogarithmic) { + public void setYAxisLogarithmic(boolean isYAxisLogarithmic) { - this.isYAxisLogarithmic = isyAxisLogarithmic; + this.isYAxisLogarithmic = isYAxisLogarithmic; } - public boolean isyAxisLogarithmic() { + public boolean isYAxisLogarithmic() { return isYAxisLogarithmic; } + public void setxAxisMin(double xAxisMin) { + + this.xAxisMin = xAxisMin; + } + + public Double getxAxisMin() { + + return xAxisMin; + } + + public void setxAxisMax(double xAxisMax) { + + this.xAxisMax = xAxisMax; + } + + public Double getxAxisMax() { + + return xAxisMax; + } + + public void setyAxisMin(double yAxisMin) { + + this.yAxisMin = yAxisMin; + } + + public Double getyAxisMin() { + + return yAxisMin; + } + + public void setyAxisMax(double yAxisMax) { + + this.yAxisMax = yAxisMax; + } + + public Double getyAxisMax() { + + return yAxisMax; + } + // Chart Plot Area /////////////////////////////// /** diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java index 7561f5b4f8200479a9af86ea4a8f7c8647dfe9e5..63a2e8ba6a0c34a5118e44e52e6598b27a99700a 100644 --- a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java +++ b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java @@ -39,7 +39,8 @@ public class Example2 { for (int i = 0; i < numCharts; i++) { Chart chart = new ChartBuilder().xAxisTitle("X").yAxisTitle("Y").width(600).height(400).build(); - chart.setyAxisMinMax(-10, 10); + chart.getStyleManager().setyAxisMin(-10); + chart.getStyleManager().setyAxisMax(10); Series series = chart.addSeries("" + i, null, getRandomWalk(200)); series.setMarker(SeriesMarker.NONE); charts.add(chart); diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java index 8a4832d3c9da1839ec2288c4626100f9e5cbed6d..965bc737937e798168473f35fa2a58a79ac885f5 100644 --- a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java +++ b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java @@ -51,8 +51,10 @@ public class NoBug { } String seriesName = "series " + n; Series series = chart.addSeries(seriesName, x, y); - chart.setxAxisMinMax(0, 1); - chart.setyAxisMinMax(-5, 5); + chart.getStyleManager().setxAxisMin(0); + chart.getStyleManager().setxAxisMax(1); + chart.getStyleManager().setyAxisMin(-5); + chart.getStyleManager().setyAxisMax(5); return seriesName; }