Skip to content
Snippets Groups Projects
Commit 992602d1 authored by Tim Molter's avatar Tim Molter
Browse files

added style methods to provide axis tick spacing hints as requested in issue #52

parent 7f59cf2c
No related branches found
No related tags found
No related merge requests found
Showing
with 78 additions and 10 deletions
......@@ -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>();
......
......@@ -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
*
......
......@@ -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));
}
......
......@@ -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>();;
......
......@@ -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;
......
......@@ -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) {
......
......@@ -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
......
......@@ -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
......
......@@ -96,6 +96,10 @@ public interface Theme {
public int getPlotPadding();
public int getXAxisTickMarkSpacingHint();
public int getYAxisTickMarkSpacingHint();
// Chart Plot Area ///////////////////////////////
public boolean isPlotGridLinesVisible();
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment