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 2e80255e4192dff2131cc43c319f5c59186429e8..f653040addcae179b272f4213a8bdb3656691ee4 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
@@ -102,10 +102,18 @@ public class PlotContentBarChart extends PlotContent {
         if (xData.contains(categoryItr.next())) {
 
           BigDecimal y = new BigDecimal(yItr.next().doubleValue());
-          int yTransform = (int) (bounds.getHeight() - (yTopMargin + y.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
+          BigDecimal yTop = new BigDecimal(y.doubleValue());
+          if (yTop.compareTo(yMax) > 0) {
+            yTop = yMax;
+          }
+          int yTransform = (int) (bounds.getHeight() - (yTopMargin + yTop.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
           int yOffset = (int) (bounds.getY() + yTransform);
 
-          int zeroTransform = (int) (bounds.getHeight() - (yTopMargin + (yMin.subtract(yMin).doubleValue()) / (yMax.subtract(yMin).doubleValue()) * yTickSpace));
+          BigDecimal yBottom = new BigDecimal(y.doubleValue());
+          if (yBottom.compareTo(yMin) > 0) {
+            yBottom = yMin;
+          }
+          int zeroTransform = (int) (bounds.getHeight() - (yTopMargin + (yBottom.subtract(yMin).doubleValue()) / (yMax.subtract(yMin).doubleValue()) * yTickSpace));
           int zeroOffset = (int) (bounds.getY() + zeroTransform);
 
           // paint bar