From 824a708c995a509d755fad4261a2e7bf83707689 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Sun, 24 Feb 2013 16:02:03 +0100 Subject: [PATCH] misc fixes on demoCharts app --- .../xchart/demo/charts/bar/BarChart05.java | 15 +++---- .../xchart/demo/charts/date/DateChart01.java | 12 +++--- .../xchart/demo/charts/date/DateChart02.java | 12 +++--- .../xchart/demo/charts/date/DateChart03.java | 12 +++--- .../xchart/demo/charts/date/DateChart04.java | 12 +++--- .../xchart/demo/charts/date/DateChart05.java | 12 +++--- .../xchart/demo/charts/date/DateChart06.java | 10 ++--- .../xchart/demo/charts/date/DateChart07.java | 9 ++--- .../demo/charts/scatter/ScatterChart03.java | 9 ++++- .../src/main/java/com/xeiam/xchart/Chart.java | 13 +++++++ .../main/java/com/xeiam/xchart/Series.java | 2 + .../xeiam/xchart/internal/chartpart/Axis.java | 2 +- .../xchart/internal/chartpart/AxisPair.java | 2 + .../chartpart/PlotContentBarChart.java | 19 --------- .../AxisTickCalculator.java | 2 +- .../BarChartAxisTickCalculator.java | 21 ++++++---- .../DateAxisTickCalculator.java | 39 +++++-------------- .../axistickcalculator/DateFormatter.java | 3 +- 18 files changed, 92 insertions(+), 114 deletions(-) diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java index 15416f08..689c341a 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java @@ -21,6 +21,9 @@ */ package com.xeiam.xchart.demo.charts.bar; +import java.util.ArrayList; +import java.util.Arrays; + import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; @@ -32,7 +35,7 @@ import com.xeiam.xchart.style.theme.GGPlot2Theme; * <p> * Demonstrates the following: * <ul> - * <li>Number categories + * <li>String categories * <li>Positive and negative values * <li>Multiple series */ @@ -49,12 +52,10 @@ public class BarChart05 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Temperature vs. Length").xAxisTitle("Length").yAxisTitle("Temperature").theme(new GGPlot2Theme()).build(); - chart.addSeries("fish", new double[] { 10, 20, 30, 40 }, new double[] { -40, 30, 20, 60 }); - chart.addSeries("worms", new double[] { 10, 20, 30, 40 }, new double[] { 50, 10, -20, 40 }); - - // Customize Chart - chart.getStyleManager().setChartTitleVisible(false); + Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Temperature vs. Color").xAxisTitle("Color").yAxisTitle("Temperature").theme(new GGPlot2Theme()).build(); + // List<Number> data = ; + chart.addCategorySeries("fish", new ArrayList<String>(Arrays.asList(new String[] { "Blue", "Red", "Green", "Yellow" })), new ArrayList<Number>(Arrays.asList(new Number[] { -40, 30, 20, 60 }))); + chart.addCategorySeries("worms", new ArrayList<String>(Arrays.asList(new String[] { "Blue", "Red", "Green", "Yellow" })), new ArrayList<Number>(Arrays.asList(new Number[] { 50, 10, -20, 40 }))); return chart; } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java index 6625e9aa..ffbd858b 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java @@ -24,12 +24,12 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; /** - * Millisecond scale + * Millisecond Scale * * @author timmolter */ @@ -46,7 +46,8 @@ public class DateChart01 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Millisecond Scale").build(); + chart.getStyleManager().setLegendVisible(false); Random random = new Random(); @@ -67,10 +68,7 @@ public class DateChart01 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart01"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java index b3627c3b..d2312070 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java @@ -24,12 +24,12 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; /** - * Second scale + * Second Scale * * @author timmolter */ @@ -46,7 +46,8 @@ public class DateChart02 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Second Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -66,10 +67,7 @@ public class DateChart02 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart02"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; 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 2e2dbb33..bcc34e81 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 @@ -24,12 +24,12 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; /** - * Minute scale + * Minute Scale * * @author timmolter */ @@ -46,7 +46,8 @@ public class DateChart03 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Minute Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -66,10 +67,7 @@ public class DateChart03 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart03"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java index 9e281745..9cd21ee3 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java @@ -24,12 +24,12 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; /** - * Hour scale + * Hour Scale * * @author timmolter */ @@ -46,7 +46,8 @@ public class DateChart04 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Hour Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -66,10 +67,7 @@ public class DateChart04 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart04"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java index d0d4b481..dcbfce3f 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java @@ -24,12 +24,12 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; /** - * Day scale + * Day Scale * * @author timmolter */ @@ -46,7 +46,8 @@ public class DateChart05 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Day Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -66,10 +67,7 @@ public class DateChart05 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart05"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java index 785c5904..a363bd52 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java @@ -24,7 +24,7 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; -import com.xeiam.xchart.Series; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; @@ -46,7 +46,8 @@ public class DateChart06 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Month Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -66,10 +67,7 @@ public class DateChart06 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart06"); - chart.getStyleManager().setLegendVisible(false); - Series series = chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java index b9d2ad54..6b96f223 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java @@ -24,6 +24,7 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; @@ -45,7 +46,8 @@ public class DateChart07 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new ChartBuilder().width(800).height(600).title("Year Scale").build(); + chart.getStyleManager().setLegendVisible(false); // generate data Collection<Date> xData = new ArrayList<Date>(); @@ -65,10 +67,7 @@ public class DateChart07 implements ExampleChart { yData.add(Math.random() * i); } - // Customize Chart - chart.setChartTitle("DateChart06"); - chart.getStyleManager().setLegendVisible(false); - chart.addDateSeries("value", xData, yData); + chart.addDateSeries("blah", xData, yData); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart03.java index a738bb96..14eb6ba4 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart03.java @@ -19,8 +19,15 @@ import com.xeiam.xchart.Chart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; +/** + * + */ /** * Single point + * <p> + * Demonstrates the following: + * <ul> + * <li>Single point */ public class ScatterChart03 implements ExampleChart { @@ -38,7 +45,7 @@ public class ScatterChart03 implements ExampleChart { Chart chart = new Chart(800, 600); // Customize Chart - chart.setChartTitle("ScatterChart03"); + chart.setChartTitle("Single Point"); chart.setXAxisTitle("X"); chart.setYAxisTitle("Y"); diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java index 01fcd349..de606253 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Chart.java +++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java @@ -116,6 +116,19 @@ public class Chart { // PUBLIC SETTERS + /** + * Add a Category series to the chart + * + * @param seriesName + * @param xData + * @param yData + * @return + */ + public Series addCategorySeries(String seriesName, Collection<String> xData, Collection<Number> yData) { + + return axisPair.addSeries(seriesName, xData, yData, null); + } + /** * Add a Date series to the chart * diff --git a/xchart/src/main/java/com/xeiam/xchart/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java index 638ee8ad..771789ce 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Series.java +++ b/xchart/src/main/java/com/xeiam/xchart/Series.java @@ -130,6 +130,8 @@ public class Series { } else if (axisType == AxisType.Date) { Date date = (Date) dataPoint; bigDecimal = new BigDecimal(date.getTime()); + } else if (axisType == AxisType.String) { + return new BigDecimal[] { null, null }; } if (min == null || bigDecimal.compareTo(min) < 0) { min = bigDecimal; 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 d7e0d81b..b5a91530 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 @@ -33,7 +33,7 @@ public class Axis implements ChartPart { public enum AxisType { - Number, Date; + Number, Date, String; } /** parent */ diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java index 7d7e08f2..8f78703a 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java @@ -90,6 +90,8 @@ public class AxisPair implements ChartPart { xAxis.setAxisType(AxisType.Number); } else if (dataPoint instanceof Date) { xAxis.setAxisType(AxisType.Date); + } else if (dataPoint instanceof String) { + xAxis.setAxisType(AxisType.String); } yAxis.setAxisType(AxisType.Number); series = new Series(seriesName, xData, xAxis.getAxisType(), yData, yAxis.getAxisType(), errorBars, seriesColorMarkerLineStyleCycler.getNextSeriesColorMarkerLineStyle()); 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 598fe7a0..f036d0dd 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 @@ -19,7 +19,6 @@ import java.awt.Graphics2D; import java.awt.Rectangle; import java.math.BigDecimal; import java.util.Collection; -import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -27,7 +26,6 @@ import java.util.TreeSet; import com.xeiam.xchart.Chart; import com.xeiam.xchart.Series; -import com.xeiam.xchart.internal.chartpart.Axis.AxisType; /** * @author timmolter @@ -70,7 +68,6 @@ public class PlotContentBarChart extends PlotContent { } int numBars = categories.size(); int gridStep = (int) (xTickSpace / (double) numBars); - int firstPosition = (int) (gridStep / 2.0); // plot series int seriesCounter = 0; @@ -91,29 +88,13 @@ public class PlotContentBarChart extends PlotContent { } Iterator<?> categoryItr = categories.iterator(); - Iterator<?> xItr = xData.iterator(); Iterator<Number> yItr = yData.iterator(); int barCounter = 0; while (categoryItr.hasNext()) { - // BigDecimal category = null; - // if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) { - // category = new BigDecimal(((Number) categoryItr.next()).doubleValue()); - // } - // if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) { - // category = new BigDecimal(((Date) categoryItr.next()).getTime()); - // } - if (xData.contains(categoryItr.next())) { - BigDecimal x = null; - if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) { - x = new BigDecimal(((Number) xItr.next()).doubleValue()); - } - if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) { - x = new BigDecimal(((Date) xItr.next()).getTime()); - } BigDecimal y = new BigDecimal(yItr.next().doubleValue()); int yTransform = (int) (bounds.getHeight() - (yTopMargin + y.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace)); int yOffset = (int) (bounds.getY() + yTransform); 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 637a21d4..827c79d1 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 @@ -70,7 +70,7 @@ public abstract class AxisTickCalculator { // override min/max value for bar charts' Y-Axis BigDecimal overrideMinValue = minValue; BigDecimal overrideMaxValue = maxValue; - if (styleManager.getChartType() == ChartType.Bar) { // this is the Y-Axis for a bar chart + if (styleManager.getChartType() == ChartType.Bar && axisDirection == Direction.Y) { // this is the Y-Axis for a bar chart if (minValue.compareTo(BigDecimal.ZERO) > 0 && maxValue.compareTo(BigDecimal.ZERO) > 0) { overrideMinValue = BigDecimal.ZERO; } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/BarChartAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/BarChartAxisTickCalculator.java index 25fdfab3..4e257ae8 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/BarChartAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/BarChartAxisTickCalculator.java @@ -65,20 +65,20 @@ public class BarChartAxisTickCalculator extends AxisTickCalculator { int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); // get all categories - Set<BigDecimal> categories = new TreeSet<BigDecimal>(); + Set<Object> categories = new TreeSet<Object>(); Map<Integer, Series> seriesMap = chart.getAxisPair().getSeriesMap(); for (Integer seriesId : seriesMap.keySet()) { Series series = seriesMap.get(seriesId); Iterator<?> xItr = series.getxData().iterator(); while (xItr.hasNext()) { - BigDecimal x = null; + Object x = null; if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.Number) { x = new BigDecimal(((Number) xItr.next()).doubleValue()); - } - if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.Date) { + } else if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.Date) { x = new BigDecimal(((Date) xItr.next()).getTime()); - // System.out.println(x); + } else if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.String) { + x = xItr.next(); } categories.add(x); } @@ -99,11 +99,16 @@ public class BarChartAxisTickCalculator extends AxisTickCalculator { dateFormatter = new DateFormatter(chart.getStyleManager()); } int counter = 0; - for (BigDecimal category : categories) { + for (Object category : categories) { if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.Number) { - tickLabels.add(numberFormatter.formatNumber(category)); + tickLabels.add(numberFormatter.formatNumber((BigDecimal) category)); } else if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.Date) { - tickLabels.add(dateFormatter.formatDate(category)); + long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space + long gridStepHint = (long) (span / (double) tickSpace * DEFAULT_TICK_MARK_STEP_HINT_X); + long timeUnit = dateFormatter.getTimeUnit(gridStepHint); + tickLabels.add(dateFormatter.formatDate((BigDecimal) category, timeUnit)); + } else if (chart.getAxisPair().getxAxis().getAxisType() == AxisType.String) { + tickLabels.add(category.toString()); } int tickLabelPosition = margin + firstPosition + gridStep * counter++; tickLocations.add(tickLabelPosition); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java index ca216ce0..77c253de 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java @@ -54,40 +54,12 @@ public class DateAxisTickCalculator extends AxisTickCalculator { private void calculate() { - // a check if all axis data are the exact same values - if (minValue == maxValue) { - tickLabels.add(dateFormatter.formatDate(maxValue)); - tickLocations.add((int) (workingSpace / 2.0)); - return; - } - // tick space - a percentage of the working space available for ticks, i.e. 95% int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space // where the tick should begin in the working space in pixels int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); - BigDecimal gridStep = getGridStep(tickSpace); - BigDecimal firstPosition = getFirstPosition(gridStep); - - // generate all tickLabels and tickLocations from the first to last position - for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { - - tickLabels.add(dateFormatter.formatDate(tickPosition)); - // here we convert tickPosition finally to plot space, i.e. pixels - int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); - tickLocations.add(tickLabelPosition); - } - } - - /** - * Determine the grid step for the data set given the space in pixels allocated for the axis - * - * @param tickSpace in plot space - * @return - */ - private BigDecimal getGridStep(int tickSpace) { - // the span of the data long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space @@ -103,7 +75,16 @@ public class DateAxisTickCalculator extends AxisTickCalculator { } } - return gridStep; + BigDecimal firstPosition = getFirstPosition(gridStep); + + // generate all tickLabels and tickLocations from the first to last position + for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(maxValue) <= 0; tickPosition = tickPosition.add(gridStep)) { + + tickLabels.add(dateFormatter.formatDate(tickPosition, timeUnit)); + // here we convert tickPosition finally to plot space, i.e. pixels + int tickLabelPosition = (int) (margin + ((tickPosition.subtract(minValue)).doubleValue() / (maxValue.subtract(minValue)).doubleValue() * tickSpace)); + tickLocations.add(tickLabelPosition); + } } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateFormatter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateFormatter.java index d1d6ba71..e94786e9 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateFormatter.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateFormatter.java @@ -44,7 +44,6 @@ public class DateFormatter { public static final long YEAR_SCALE = TimeUnit.DAYS.toMillis(1L) * 365; private Map<Long, int[]> validTickStepsMap; - private long timeUnit; private final StyleManager styleManager; @@ -87,7 +86,7 @@ public class DateFormatter { * @param max * @return */ - String formatDate(BigDecimal value) { + String formatDate(BigDecimal value, long timeUnit) { String datePattern; -- GitLab