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

allow for repeated categories in bar charts

parent fb7d6f5c
No related branches found
No related tags found
No related merge requests found
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package com.xeiam.xchart.internal.chartpart; package com.xeiam.xchart.internal.chartpart;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
...@@ -56,13 +55,13 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { ...@@ -56,13 +55,13 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
// where the tick should begin in the working space in pixels // where the tick should begin in the working space in pixels
double margin = Utils.getTickStartOffset(workingSpace, tickSpace); double margin = Utils.getTickStartOffset(workingSpace, tickSpace);
// get all categories List<?> firstXAxis = (List<?>) chartPainter.getAxisPair().getSeriesMap().values().iterator().next().getXData();
List<Object> categories = new ArrayList<Object>();
Series firstSeries = chartPainter.getAxisPair().getSeriesMap().values().iterator().next(); // we use this to check all series have the exact same length and values // verify all series have exactly the same xAxis
for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) { if (chartPainter.getAxisPair().getSeriesMap().size() > 1) {
Iterator<?> firstSeriesItr = firstSeries.getXData().iterator(); for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) {
Iterator<?> firstSeriesItr = firstXAxis.iterator();
Iterator<?> xItr = series.getXData().iterator(); Iterator<?> xItr = series.getXData().iterator();
while (xItr.hasNext()) { while (xItr.hasNext()) {
...@@ -72,6 +71,17 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { ...@@ -72,6 +71,17 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
if (!firstSeriesNext.equals(next)) { if (!firstSeriesNext.equals(next)) {
throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Bar Charts!!"); throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Bar Charts!!");
} }
}
}
}
for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) {
Iterator<?> xItr = series.getXData().iterator();
while (xItr.hasNext()) {
// check matching
Object next = xItr.next();
Object x = null; Object x = null;
if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
...@@ -83,25 +93,22 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { ...@@ -83,25 +93,22 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) { else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
x = next; x = next;
} }
if (!categories.contains(x)) {
categories.add(x);
}
} }
} }
if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) { if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
double gridStep = (tickSpace / (double) categories.size()); double gridStep = (tickSpace / (double) firstXAxis.size());
double firstPosition = gridStep / 2.0; double firstPosition = gridStep / 2.0;
int counter = 0; int counter = 0;
for (Object category : categories) { for (Object category : firstXAxis) {
tickLabels.add(category.toString()); tickLabels.add(category.toString());
double tickLabelPosition = margin + firstPosition + gridStep * counter++; double tickLabelPosition = margin + firstPosition + gridStep * counter++;
tickLocations.add(tickLabelPosition); tickLocations.add(tickLabelPosition);
} }
} }
double gridStep = (tickSpace / (double) categories.size()); double gridStep = (tickSpace / (double) firstXAxis.size());
double firstPosition = gridStep / 2.0; double firstPosition = gridStep / 2.0;
// generate all tickLabels and tickLocations from the first to last position // generate all tickLabels and tickLocations from the first to last position
...@@ -116,7 +123,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator { ...@@ -116,7 +123,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
} }
int counter = 0; int counter = 0;
for (Object category : categories) { for (Object category : firstXAxis) {
if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) { if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
tickLabels.add(numberFormatter.formatNumber(new BigDecimal(category.toString()), minValue, maxValue, axisDirection)); tickLabels.add(numberFormatter.formatNumber(new BigDecimal(category.toString()), minValue, maxValue, axisDirection));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment