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 15416f087bb53d0b26a62cf2788c9afa4cd976bc..689c341a4420bec3a3cd2cd83dc10b771a1b4d5d 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 6625e9aa72e11ee85fe1c8191721b62f0a7026a3..ffbd858b3276044c8fd6752c020b24a653e61288 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 b3627c3b681a09eb0205250433012b8f4496b441..d2312070bfa6e6e678cc249bb58409fa5b95f421 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 2e2dbb333570bc22926c3aa63bf04ba8ed216069..bcc34e8196d66953f5ba01e9f03b181a9746f562 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 9e281745343c6373bf116c423ade314a512d5420..9cd21ee35b1f679836111e12bb9551a1ca71c079 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 d0d4b4811493ae254c4ce13cd7635a8b24a2bf72..dcbfce3f081fb1dfb25d0041137f68afcbd0c404 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 785c5904261edfeda6834ccd667000b82351d4bf..a363bd52d0ff30a12e0b32a2c42e026ebbafb67f 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 b9d2ad5451ef8f63cd997175f9e02e38eda3c7b5..6b96f2234036c4452c01d2fbd05a5f89ba0a117d 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 a738bb969a640f8cbf3f3031385c603989215603..14eb6ba4798c280326033e21c855d405beb9e9a6 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 01fcd349db13c8fd2a24fc1f7137777a21c0f524..de6062539a31dd95312d25f878a05610bbf99156 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 638ee8ad194158b7599644047adcb7f35c9fd727..771789ce4f461562aaca2c5cd6ccea948d66921b 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 d7e0d81baa4524c94096927e2c03371198866fd6..b5a91530a5987320a84a56982dd23515e5d22f7d 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 7d7e08f2cc1543e16794177c298071897575d704..8f78703a3e4dc4bc2819f2a5606ead4e8226141d 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 598fe7a022f2f43eb9f1f5cc3af6a6f0de3dfdff..f036d0ddca3e421ac6e72d433203de04b57c5aca 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 637a21d477aaa97a33773051ee43fe93bd284339..827c79d1a5298bfbd0675859b247bb9d033c5401 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 25fdfab3b52cf33686c2373de78ad6b4d5e9f77d..4e257ae82e55601868cee138497a9329de5394c0 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 ca216ce07d4c413e26c846d56232cbf22b4d0191..77c253de9baef4ebd94d843c1c7c375a50ceb10f 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 d1d6ba7133212f974fabd56d4d6138a3fd31449b..e94786e923b9aaa54b1d86a7bce4c95a9698c88e 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;