diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java index 1b47528a87c740044551f017417cf399c7104961..8690b96fcf4058cf0b2342d354178c74ac2dbd1e 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java @@ -34,6 +34,7 @@ import com.xeiam.xchart.demo.charts.bar.BarChart01; import com.xeiam.xchart.demo.charts.bar.BarChart02; import com.xeiam.xchart.demo.charts.bar.BarChart03; import com.xeiam.xchart.demo.charts.bar.BarChart04; +import com.xeiam.xchart.demo.charts.bar.BarChart05; import com.xeiam.xchart.demo.charts.date.DateChart01; import com.xeiam.xchart.demo.charts.date.DateChart02; import com.xeiam.xchart.demo.charts.date.DateChart03; @@ -181,7 +182,10 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { chart = new DefaultMutableTreeNode(new ChartInfo("BarChart03 - Basic Bar Chart", new BarChart03().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Basic Bar Chart", new BarChart04().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Missing Point in Series", new BarChart04().getChart())); + category.add(chart); + + chart = new DefaultMutableTreeNode(new ChartInfo("BarChart05 - Basic Bar Chart", new BarChart05().getChart())); category.add(chart); // Area category diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java index 5712fc89d3f7184728746e5f24cbf9b7959b84e1..ec119137e5129d85c4c109d7142b846d6d451299 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java @@ -51,11 +51,10 @@ public class BarChart01 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart01").xAxisTitle("X").yAxisTitle("Y").build(); - chart.addSeries("a", new double[] { 0, 1, 2, 3, 4 }, new double[] { 4, 5, 9, 6, 5 }); + Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Score Histgram").xAxisTitle("Score").yAxisTitle("Number").build(); + chart.addSeries("test 1", new double[] { 0, 1, 2, 3, 4 }, new double[] { 4, 5, 9, 6, 5 }); // Customize Chart - chart.getStyleManager().setChartTitleVisible(false); chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java index 91645670c55d91754d72d53d7b474be47cf85fcc..51325c8986ba69f82aa854a7fa78019bbaecaa8d 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java @@ -43,6 +43,7 @@ import com.xeiam.xchart.style.StyleManager.ChartType; * <li>Date categories * <li>All negative values * <li>Single series + * <li>No horizontal plot gridlines */ public class BarChart02 implements ExampleChart { @@ -75,6 +76,7 @@ public class BarChart02 implements ExampleChart { yData.add(random.nextInt(i) + 1); } chart.addDateSeries("Model 77", xData, yData); + chart.getStyleManager().setPlotGridLinesVisible(false); return chart; } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java index 77dfe5b6aa0e0a3550d969bc5c1c725ac54c310f..6f49563d52059a72268105c3ac2d9a9ecea012b0 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java @@ -49,11 +49,8 @@ public class BarChart03 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart03").xAxisTitle("X").yAxisTitle("Y").build(); - chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { 40, -30, -20, -60 }); - - // Customize Chart - chart.getStyleManager().setChartTitleVisible(false); + Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Score vs. Age").xAxisTitle("Age").yAxisTitle("Score").build(); + chart.addSeries("males", new double[] { 10, 20, 30, 40 }, new double[] { 40, -30, -20, -60 }); return chart; } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java index 58c5eb0cc658be88f1d7a670b535704acea2fda0..f26db94013a5286bc4eb1c9d1b22d0117b555f57 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java @@ -28,13 +28,14 @@ import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.StyleManager.ChartType; /** - * Basic Bar Chart + * Missing Point in Series * <p> * Demonstrates the following: * <ul> * <li>Number categories - * <li>Positive and negative values + * <li>Positive values * <li>Multiple series + * <li>Missing point in series */ public class BarChart04 implements ExampleChart { @@ -49,12 +50,9 @@ public class BarChart04 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart04").xAxisTitle("X").yAxisTitle("Y").build(); - chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { 40, 30, 20, 60 }); - chart.addSeries("b", 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("XFactor vs. Age").xAxisTitle("Age").yAxisTitle("XFactor").build(); + chart.addSeries("male", new double[] { 10, 20, 30, 50 }, new double[] { 40, 30, 20, 60 }); + chart.addSeries("female", new double[] { 10, 20, 30, 40, 50 }, new double[] { 50, 10, 20, 40, 35 }); return chart; } 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 92b0ef3f68c8c8bd6e011d01279140358576824a..15416f087bb53d0b26a62cf2788c9afa4cd976bc 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 @@ -26,9 +26,9 @@ import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.StyleManager.ChartType; +import com.xeiam.xchart.style.theme.GGPlot2Theme; /** - * Basic Bar Chart * <p> * Demonstrates the following: * <ul> @@ -49,9 +49,9 @@ public class BarChart05 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart05").xAxisTitle("X").yAxisTitle("Y").build(); - chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { -40, 30, 20, 60 }); - chart.addSeries("b", new double[] { 10, 20, 30, 40 }, new double[] { 50, 10, -20, 40 }); + 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); 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 eae07dceabfba7e36765716d277a58aa6db142b4..598fe7a022f2f43eb9f1f5cc3af6a6f0de3dfdff 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 @@ -58,21 +58,14 @@ public class PlotContentBarChart extends PlotContent { int yTopMargin = AxisPair.getTickStartOffset((int) bounds.getHeight(), yTickSpace); // get all categories - Set<BigDecimal> categories = new TreeSet<BigDecimal>(); + Set<Object> categories = new TreeSet<Object>(); Map<Integer, Series> seriesMap = getChart().getAxisPair().getSeriesMap(); for (Integer seriesId : seriesMap.keySet()) { Series series = seriesMap.get(seriesId); Iterator<?> xItr = series.getxData().iterator(); while (xItr.hasNext()) { - 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()); - } - categories.add(x); + categories.add(xItr.next()); } } int numBars = categories.size(); @@ -97,21 +90,30 @@ public class PlotContentBarChart extends PlotContent { yMax = BigDecimal.ZERO; } + Iterator<?> categoryItr = categories.iterator(); Iterator<?> xItr = xData.iterator(); Iterator<Number> yItr = yData.iterator(); int barCounter = 0; - while (xItr.hasNext()) { - 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()); - } - - if (categories.contains(x)) { - + 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); @@ -125,6 +127,8 @@ public class PlotContentBarChart extends PlotContent { int xOffset = (int) (bounds.getX() + xLeftMargin + gridStep * barCounter++ + seriesCounter * barWidth + barMargin); g.setColor(series.getStrokeColor()); g.fillPolygon(new int[] { xOffset, xOffset + barWidth, xOffset + barWidth, xOffset }, new int[] { yOffset, yOffset, zeroOffset, zeroOffset }, 4); + } else { + barCounter++; } } seriesCounter++;