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 6916afd19a1d29c9e80ea02798b359a9eb57489f..840c9718a6cad0a86e8dfe6ee657c9961b555414 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 @@ -30,6 +30,7 @@ import javax.swing.tree.TreeSelectionModel; import com.xeiam.xchart.XChartPanel; import com.xeiam.xchart.demo.charts.area.AreaChart01; +import com.xeiam.xchart.demo.charts.area.AreaChart02; import com.xeiam.xchart.demo.charts.bar.BarChart01; import com.xeiam.xchart.demo.charts.bar.BarChart02; import com.xeiam.xchart.demo.charts.bar.BarChart03; @@ -146,6 +147,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { chart = new DefaultMutableTreeNode(new ChartInfo("AreaChart01 - 3-Series", new AreaChart01().getChart())); category.add(chart); + chart = new DefaultMutableTreeNode(new ChartInfo("AreaChart02 - Null Y-Axis Data Points", new AreaChart02().getChart())); + category.add(chart); + // First category category = new DefaultMutableTreeNode("Line Charts"); top.add(category); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart02.java new file mode 100644 index 0000000000000000000000000000000000000000..46e3de70a55a965e1e96078c417ac9335fbfbea7 --- /dev/null +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart02.java @@ -0,0 +1,76 @@ +/** + * Copyright 2011-2013 Xeiam LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xeiam.xchart.demo.charts.area; + +import java.util.ArrayList; +import java.util.Collection; + +import com.xeiam.xchart.Chart; +import com.xeiam.xchart.ChartBuilder; +import com.xeiam.xchart.StyleManager.ChartType; +import com.xeiam.xchart.StyleManager.LegendPosition; +import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; + +/** + * Null Y-Axis Data Points + * <p> + * Demonstrates the following: + * <ul> + * <li>Area Chart + * <li>null Y-Axis values + * <li>ChartBuilder + */ +public class AreaChart02 implements ExampleChart { + + public static void main(String[] args) { + + ExampleChart exampleChart = new AreaChart02(); + Chart chart = exampleChart.getChart(); + new SwingWrapper(chart).displayChart(); + } + + @Override + public Chart getChart() { + + // Create Chart + Chart chart = new ChartBuilder().chartType(ChartType.Area).width(800).height(600).title("AreaChart02").xAxisTitle("X").yAxisTitle("Y").build(); + + Collection<Number> xData = new ArrayList<Number>(); + Collection<Number> yData = new ArrayList<Number>(); + for (int i = 0; i < 5; i++) { + xData.add(i); + yData.add(i * i); + } + xData.add(5); + yData.add(null); + + for (int i = 6; i < 10; i++) { + xData.add(i); + yData.add(i * i); + } + xData.add(10); + yData.add(null); + + chart.addSeries("a", xData, yData); + + // Customize Chart + 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 2b6c91b147e5b7326acf69be3ec9d1d361dfa276..a2edf3bfa05747cf8d335be69e8d2424936e4418 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 @@ -33,6 +33,7 @@ import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.Series; import com.xeiam.xchart.SeriesColor; +import com.xeiam.xchart.StyleManager.ChartTheme; import com.xeiam.xchart.StyleManager.ChartType; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.demo.charts.ExampleChart; @@ -47,6 +48,7 @@ import com.xeiam.xchart.demo.charts.ExampleChart; * <li>Single series * <li>No horizontal plot gridlines * <li>Change series color + * <li>MATLAB Theme */ public class BarChart02 implements ExampleChart { @@ -61,7 +63,7 @@ public class BarChart02 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Units Sold Per Year").xAxisTitle("Year").yAxisTitle("Units Sold").build(); + Chart chart = new ChartBuilder().theme(ChartTheme.Matlab).chartType(ChartType.Bar).width(800).height(600).title("Units Sold Per Year").xAxisTitle("Year").yAxisTitle("Units Sold").build(); Collection<Date> xData = new ArrayList<Date>(); Collection<Number> yData = new ArrayList<Number>(); diff --git a/xchart/src/main/java/com/xeiam/xchart/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java index 4353cc2b142ca21f89c687fb931d910bb767968e..185e1646118ba7b76651f6c5f6e58eab18df7210 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Series.java +++ b/xchart/src/main/java/com/xeiam/xchart/Series.java @@ -121,6 +121,10 @@ public class Series { for (Object dataPoint : data) { + if (dataPoint == null) { + continue; + } + BigDecimal bigDecimal = null; if (axisType == AxisType.Number) { diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java index e24f7f24b3d69f621b07a4d04208d3de95d4ec06..1b81274c32bdf92e8321264e20172bb92393a945 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java @@ -119,7 +119,11 @@ public class PlotContentLineChart extends PlotContent { x = new BigDecimal(Math.log10(x.doubleValue())); } - BigDecimal yOrig = new BigDecimal(yItr.next().doubleValue()); + Number next = yItr.next(); + if (next == null) { + continue; + } + BigDecimal yOrig = new BigDecimal(next.doubleValue()); BigDecimal y = null; BigDecimal eb = BigDecimal.ZERO;