From a88789b3aba2085bb37ebac5420e7912cb0efb47 Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Tue, 2 Apr 2013 17:36:08 +0200
Subject: [PATCH] fixed error bar on log charts

---
 .../xchart/standalone/ErrorBarText2.java      | 14 ++++-----
 .../internal/chartpart/ChartPainter.java      |  3 +-
 .../chartpart/PlotContentLineChart.java       | 31 +++++++++++++------
 3 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/ErrorBarText2.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/ErrorBarText2.java
index c97f1729..2e55f13e 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/ErrorBarText2.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/ErrorBarText2.java
@@ -39,13 +39,15 @@ public class ErrorBarText2 {
 
     double[] xData = new double[] { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
 
-    double[] yData1 = new double[] { 100, 100, 100, 10, 10, 10, 10 };
+    // double[] yData1 = new double[] { 100, 100, 100, 10, 10, 10, 10 };
+    double[] yData1 = new double[] { 100, 100, 100, 60, 10, 10, 10 };
 
-    double[] yData2 = new double[] { 50, 80, 90, 1, 5, 8, 9 };
+    double[] yData2 = new double[] { 150, 120, 110, 112, 19, 12, 11 };
 
-    double[] yData3 = new double[] { 150, 120, 110, 19, 15, 12, 11 };
+    double[] yData3 = new double[] { 50, 80, 90, 8, 1, 8, 9 };
 
-    double[] errdata = new double[] { 1, .699, .301, 2, 1, .699, 0.301 };
+    // double[] errdata = new double[] { 1, .699, .301, 2, 1, .699, 0.301 };
+    double[] errdata = new double[] { 50, 20, 10, 52, 9, 2, 1 };
 
     Chart mychart = new Chart(1200, 800);
 
@@ -55,10 +57,6 @@ public class ErrorBarText2 {
 
     mychart.getStyleManager().setYAxisMax(1000);
 
-    mychart.getStyleManager().setXAxisMin(0);
-
-    mychart.getStyleManager().setXAxisMax(10);
-
     mychart.getStyleManager().setErrorBarsColor(Color.black);
 
     Series series1 = mychart.addSeries("Error bar test data", xData, yData1, errdata);
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
index 1005e30b..8d91f121 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/ChartPainter.java
@@ -86,7 +86,8 @@ public class ChartPainter {
       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!!!");
+      System.out.println(axisPair.getyAxis().getMin());
+      // 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
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 ad49e28d..b2a8ed14 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
@@ -118,18 +118,17 @@ public class PlotContentLineChart extends PlotContent {
           x = new BigDecimal(Math.log10(x.doubleValue()));
         }
 
-        BigDecimal y = new BigDecimal(yItr.next().doubleValue());
-
-        if (getChartPainter().getStyleManager().isYAxisLogarithmic()) {
-          y = new BigDecimal(Math.log10(y.doubleValue()));
-        }
-
-        // System.out.println(y);
+        BigDecimal yOrig = new BigDecimal(yItr.next().doubleValue());
+        BigDecimal y = null;
         BigDecimal eb = BigDecimal.ZERO;
+
         if (errorBars != null) {
           eb = new BigDecimal(ebItr.next().doubleValue());
         }
 
+        // System.out.println(y);
+        y = new BigDecimal(Math.log10(yOrig.doubleValue()));
+
         int xTransform = (int) (xLeftMargin + (x.subtract(xMin).doubleValue() / xMax.subtract(xMin).doubleValue() * xTickSpace));
         int yTransform = (int) (bounds.getHeight() - (yTopMargin + y.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
 
@@ -177,14 +176,28 @@ public class PlotContentLineChart extends PlotContent {
 
         // paint errorbar
         if (errorBars != null) {
+
           g.setColor(getChartPainter().getStyleManager().getErrorBarsColor());
           g.setStroke(errorBarStroke);
 
-          BigDecimal topValue = y.add(eb);
+          BigDecimal topValue = null;
+          if (getChartPainter().getStyleManager().isYAxisLogarithmic()) {
+            topValue = yOrig.add(eb);
+            topValue = new BigDecimal(Math.log10(topValue.doubleValue()));
+          } else {
+            topValue = y.add(eb);
+          }
           int topEBTransform = (int) (bounds.getHeight() - (yTopMargin + topValue.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
           int topEBOffset = (int) (bounds.getY() + topEBTransform);
 
-          BigDecimal bottomValue = y.subtract(eb);
+          BigDecimal bottomValue = null;
+          if (getChartPainter().getStyleManager().isYAxisLogarithmic()) {
+            bottomValue = yOrig.subtract(eb);
+            System.out.println(bottomValue);
+            bottomValue = new BigDecimal(Math.log10(bottomValue.doubleValue()));
+          } else {
+            bottomValue = y.subtract(eb);
+          }
           int bottomEBTransform = (int) (bounds.getHeight() - (yTopMargin + bottomValue.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
           int bottomEBOffset = (int) (bounds.getY() + bottomEBTransform);
 
-- 
GitLab