diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/theme/ThemeChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/theme/ThemeChart03.java index cc1c44b06e8442c58ae01abd4039e53a1c236838..01d9c64ad5ad8f7b036a5b00d415ff21d80869fa 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/theme/ThemeChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/theme/ThemeChart03.java @@ -54,7 +54,7 @@ public class ThemeChart03 implements ExampleChart { // Create Chart Chart chart = new ChartBuilder().width(800).height(600).theme(ChartTheme.Matlab).title("Matlab Theme").xAxisTitle("X").yAxisTitle("Y").build(); chart.getStyleManager().setPlotGridLinesVisible(false); - + chart.getStyleManager().setXAxisTickMarkSpacingHint(100); // generate data Collection<Date> xData = new ArrayList<Date>(); Collection<Number> y1Data = new ArrayList<Number>(); diff --git a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java index b7a699ffa17199b16142c862bf2a420c4730348d..3c13565b9f07d913c6da0912bc8a014e9f827a7a 100644 --- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java @@ -108,6 +108,8 @@ public class StyleManager { private boolean isAxisTicksMarksVisible; private int plotPadding; private int axisTitlePadding; + private int xAxisTickMarkSpacingHint; + private int yAxisTickMarkSpacingHint; private boolean isXAxisLogarithmic; private boolean isYAxisLogarithmic; private Double xAxisMin; @@ -183,6 +185,8 @@ public class StyleManager { isAxisTicksMarksVisible = theme.isAxisTicksMarksVisible(); plotPadding = theme.getPlotPadding(); axisTitlePadding = theme.getAxisTitlePadding(); + xAxisTickMarkSpacingHint = theme.getXAxisTickMarkSpacingHint(); + yAxisTickMarkSpacingHint = theme.getYAxisTickMarkSpacingHint(); isXAxisLogarithmic = false; isYAxisLogarithmic = false; xAxisMin = null; @@ -743,6 +747,36 @@ public class StyleManager { return axisTitlePadding; } + /** + * set the spacing between tick marks for the X-Axis + * + * @param xAxisTickMarkSpacingHint + */ + public void setXAxisTickMarkSpacingHint(int xAxisTickMarkSpacingHint) { + + this.xAxisTickMarkSpacingHint = xAxisTickMarkSpacingHint; + } + + public int getXAxisTickMarkSpacingHint() { + + return xAxisTickMarkSpacingHint; + } + + /** + * set the spacing between tick marks for the Y-Axis + * + * @param xAxisTickMarkSpacingHint + */ + public void setYAxisTickMarkSpacingHint(int yAxisTickMarkSpacingHint) { + + this.yAxisTickMarkSpacingHint = yAxisTickMarkSpacingHint; + } + + public int getYAxisTickMarkSpacingHint() { + + return yAxisTickMarkSpacingHint; + } + /** * sets the X-Axis to be rendered with a logarithmic scale or not * 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 d52a6752f62978f5a29e54a3bb862082e7ee73a7..f0096ee0c57f56eafcfbb87d79ce24dbea5b3517 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 @@ -98,7 +98,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { } else if (chartPainter.getAxisPair().getxAxis().getAxisType() == AxisType.Date) { long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space - long gridStepHint = (long) (span / (double) tickSpace * DEFAULT_TICK_MARK_STEP_HINT_X); + long gridStepHint = (long) (span / (double) tickSpace * styleManager.getXAxisTickMarkSpacingHint()); long timeUnit = dateFormatter.getTimeUnit(gridStepHint); tickLabels.add(dateFormatter.formatDate((BigDecimal) category, timeUnit)); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java index 3952ff8b3122c61d3c22585fa02e6ce5405d6730..d6c51e5e24242a3b117ed9a2d47a5d44c556d3d2 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java @@ -29,12 +29,6 @@ import com.xeiam.xchart.internal.chartpart.Axis.Direction; */ public abstract class AxisTickCalculator { - /** the default tick mark step hint for x axis */ - protected static final int DEFAULT_TICK_MARK_STEP_HINT_X = 74; - - /** the default tick mark step hint for y axis */ - protected static final int DEFAULT_TICK_MARK_STEP_HINT_Y = 44; - /** the List of tick label position in pixels */ protected List<Integer> tickLocations = new LinkedList<Integer>();; diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java index f65bed8be4569dc660ed75aa68b7d178281e098b..cf3e13f3c66096f4051286183fe9c5d36ff86264 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java @@ -57,7 +57,7 @@ public class AxisTickDateCalculator extends AxisTickCalculator { // the span of the data long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space - long gridStepHint = (long) (span / (double) tickSpace * DEFAULT_TICK_MARK_STEP_HINT_X); + long gridStepHint = (long) (span / (double) tickSpace * styleManager.getXAxisTickMarkSpacingHint()); long timeUnit = dateFormatter.getTimeUnit(gridStepHint); BigDecimal gridStep = null; 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 8f197908bb625a4d03f592f39dd9e828e235ec93..91311ab119102aec9fba8cb858f94812b12d94e1 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 @@ -90,7 +90,7 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator { // the span of the data double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space - int tickMarkSpaceHint = (axisDirection == Direction.X ? DEFAULT_TICK_MARK_STEP_HINT_X : DEFAULT_TICK_MARK_STEP_HINT_Y); + int tickMarkSpaceHint = (axisDirection == Direction.X ? styleManager.getXAxisTickMarkSpacingHint() : styleManager.getYAxisTickMarkSpacingHint()); // for very short plots, squeeze some more ticks in than normal if (axisDirection == Direction.Y && tickSpace < 160) { diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java index 6f67c743765630e97c97b08e812c16ebf54fda0c..bd8ae710dfafc215cd9a72ddcf9a403f1696d98e 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java @@ -223,6 +223,18 @@ public class GGPlot2Theme implements Theme { return 10; } + @Override + public int getXAxisTickMarkSpacingHint() { + + return 74; + } + + @Override + public int getYAxisTickMarkSpacingHint() { + + return 44; + } + // Chart Plot Area /////////////////////////////// @Override diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java index d91b07ce354a5146cfd594a17f1f8756d0d50d41..9fe1e6a970122975840070300111b7413d1de17c 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java @@ -223,6 +223,18 @@ public class MatlabTheme implements Theme { return 10; } + @Override + public int getXAxisTickMarkSpacingHint() { + + return 74; + } + + @Override + public int getYAxisTickMarkSpacingHint() { + + return 44; + } + // Chart Plot Area /////////////////////////////// @Override diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java index ffdb132dd8b3aeb3560d2d768c4d260fde317c9b..7e3efd4f1ffa710cb399053640070278b3bb21d4 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java @@ -96,6 +96,10 @@ public interface Theme { public int getPlotPadding(); + public int getXAxisTickMarkSpacingHint(); + + public int getYAxisTickMarkSpacingHint(); + // Chart Plot Area /////////////////////////////// public boolean isPlotGridLinesVisible(); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java index afbf59c9f0aafec8fc5101abd460a6798ef8117f..0048b2c9354241198cc698da5dcb7720520d0667 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java @@ -223,6 +223,18 @@ public class XChartTheme implements Theme { return 10; } + @Override + public int getXAxisTickMarkSpacingHint() { + + return 74; + } + + @Override + public int getYAxisTickMarkSpacingHint() { + + return 44; + } + // Chart Plot Area /////////////////////////////// @Override