From 43e96aa94763b810d41ab8b10459f27b210ce37f Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Mon, 4 Mar 2013 13:25:47 +0100
Subject: [PATCH] added sanity check for log data - cannot be less than zero

---
 .../xeiam/xchart/demo/charts/line/LineChart01.java  | 13 ++++++-------
 xchart/src/main/java/com/xeiam/xchart/Chart.java    |  9 ++++++++-
 .../style/SeriesColorMarkerLineStyleCycler.java     |  3 ++-
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
index 1acc6a6b..2c5d98be 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
@@ -20,7 +20,6 @@ import java.util.List;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
-import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
 import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.LegendPosition;
@@ -47,11 +46,11 @@ public class LineChart01 implements ExampleChart {
   public Chart getChart() {
 
     // generates Log data
-    List<Number> xData1 = new ArrayList<Number>();
-    List<Number> yData1 = new ArrayList<Number>();
-    for (int i = 0; i <= 10; i++) {
-      xData1.add(i);
-      yData1.add(Math.pow(10, i));
+    List<Number> xData = new ArrayList<Number>();
+    List<Number> yData = new ArrayList<Number>();
+    for (int i = -3; i <= 3; i++) {
+      xData.add(i);
+      yData.add(Math.pow(10, i) - 1);
     }
 
     // Create Chart
@@ -63,7 +62,7 @@ public class LineChart01 implements ExampleChart {
     chart.getStyleManager().setYAxisLogarithmic(true);
 
     // Series
-    Series series = chart.addSeries("10^x", xData1, yData1);
+    chart.addSeries("10^x", xData, yData);
 
     return chart;
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java
index de59ed4f..db6b70eb 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Chart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java
@@ -17,6 +17,7 @@ package com.xeiam.xchart;
 
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -97,10 +98,16 @@ public class Chart {
    */
   public void paint(Graphics2D g) {
 
-    // Sanity check
+    // Sanity checks
     if (axisPair.getSeriesMap().isEmpty()) {
       throw new RuntimeException("No series defined for Chart!!!");
     }
+    if (getStyleManager().isXAxisLogarithmic() && axisPair.getxAxis().getMin().compareTo(BigDecimal.ZERO) <= 0) {
+      throw new IllegalArgumentException("Series data cannot be less or equal to zero for a logarithmic X-Axis!!!");
+    }
+    if (getStyleManager().isYAxisLogarithmic() && axisPair.getyAxis().getMin().compareTo(BigDecimal.ZERO) <= 0) {
+      throw new IllegalArgumentException("Series data cannot be less or equal to zero for a logarithmic Y-Axis!!!");
+    }
 
     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // global rendering hint
     g.setColor(styleManager.getChartBackgroundColor());
diff --git a/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java
index 974cde0c..c9625302 100644
--- a/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java
+++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java
@@ -25,9 +25,10 @@ import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 
-
 /**
  * Cycles through the different colors, markers, and strokes in a predetermined way
+ * <p>
+ * This is an internal class that should not be used be clients
  * 
  * @author timmolter
  */
-- 
GitLab