diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart06.java index f885bdd38f874ceb1fc44016938c390213420e72..15b4ccbebcc5ee5a679cc3186261cc9754708a3e 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart06.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart06.java @@ -48,13 +48,13 @@ public class BarChart06 implements ExampleChart { // Create Chart Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Score Histogram").xAxisTitle("Score").yAxisTitle("Count").build(); - chart.addSeries("histogram 1", getGaussianData(10000), 10, -30, 30); - chart.addSeries("histogram 2", getGaussianData(10000), 10, -30, 30); + chart.addSeries("histogram 1", getGaussianData(10000), 30, -30, 30); + chart.addSeries("histogram 2", getGaussianData(5000), 30, -30, 30); // Customize Chart chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW); - chart.getStyleManager().setBarWidthPercentage(.99); - + chart.getStyleManager().setBarWidthPercentage(.96); + chart.getStyleManager().setOverlapped(false); return chart; } diff --git a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java index 32acadf243890607e6b11285de7083c93a69c2a4..d0a800506f8c3b40d2cedcf0827103a4d057ac51 100644 --- a/xchart/src/main/java/com/xeiam/xchart/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/StyleManager.java @@ -126,7 +126,10 @@ public class StyleManager { private boolean isPlotTicksMarksVisible; private Color plotGridLinesColor; private Stroke plotGridLinesStroke; + + // Bar Charts /////////////////////////////// private double barWidthPercentage; + private boolean isOverlapped; // Error Bars /////////////////////////////// private Color errorBarsColor; @@ -205,7 +208,10 @@ public class StyleManager { isPlotTicksMarksVisible = theme.isPlotTicksMarksVisible(); plotGridLinesColor = theme.getPlotGridLinesColor(); plotGridLinesStroke = theme.getPlotGridLinesStroke(); + + // Bar Charts /////////////////////////////// barWidthPercentage = theme.getBarWidthPercentage(); + isOverlapped = theme.isOverlapped(); // Error Bars /////////////////////////////// errorBarsColor = theme.getErrorBarsColor(); @@ -985,6 +991,21 @@ public class StyleManager { return barWidthPercentage; } + /** + * set whether or no bars are overlapped. Otherwise they are places side-by-side + * + * @param isOverlapped + */ + public void setOverlapped(boolean isOverlapped) { + + this.isOverlapped = isOverlapped; + } + + public boolean isOverlapped() { + + return isOverlapped; + } + // Error Bars /////////////////////////////// /** 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 262ffd1ef6bf7beca42025af2d849ad81721999e..a95330dbd2f94f3c850af4d74475cd5b3da03782 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 @@ -167,12 +167,23 @@ public class PlotContentBarChart extends PlotContent { double zeroOffset = bounds.getY() + zeroTransform; // paint bar - double barWidthPercentage = getChartPainter().getStyleManager().getBarWidthPercentage(); - double barWidth = gridStep / getChartPainter().getAxisPair().getSeriesMap().size() * barWidthPercentage; - double barMargin = gridStep * (1 - barWidthPercentage) / 2; - double xOffset = bounds.getX() + xLeftMargin + gridStep * barCounter++ + seriesCounter * barWidth + barMargin; - g.setColor(series.getStrokeColor()); - + boolean isOverlap = true; + double xOffset; + double barWidth; + if (getChartPainter().getStyleManager().isOverlapped()) { + double barWidthPercentage = getChartPainter().getStyleManager().getBarWidthPercentage(); + barWidth = gridStep * barWidthPercentage; + double barMargin = gridStep * (1 - barWidthPercentage) / 2; + xOffset = bounds.getX() + xLeftMargin + gridStep * barCounter++ + barMargin; + g.setColor(series.getStrokeColor()); + } + else { + double barWidthPercentage = getChartPainter().getStyleManager().getBarWidthPercentage(); + barWidth = gridStep / getChartPainter().getAxisPair().getSeriesMap().size() * barWidthPercentage; + double barMargin = gridStep * (1 - barWidthPercentage) / 2; + xOffset = bounds.getX() + xLeftMargin + gridStep * barCounter++ + seriesCounter * barWidth + barMargin; + g.setColor(series.getStrokeColor()); + } Path2D.Double path = new Path2D.Double(); path.moveTo(xOffset, yOffset); path.lineTo(xOffset + barWidth, yOffset); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java index 41fe250b1e20ed1430430e1e268511060961f2e9..15d0f17bae46b48944771f2321e55814b8af6561 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/GGPlot2Theme.java @@ -287,6 +287,12 @@ public class GGPlot2Theme implements Theme { return 0.9; } + @Override + public boolean isOverlapped() { + + return false; + } + // Error Bars /////////////////////////////// @Override diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java index 43cf3b2172629bf32dd356be1f83a137f534705b..d636ea92ed5e22d1f27f3f66c2eaa9886538b204 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/MatlabTheme.java @@ -288,6 +288,12 @@ public class MatlabTheme implements Theme { return 0.9; } + @Override + public boolean isOverlapped() { + + return false; + } + // Error Bars /////////////////////////////// @Override diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java index 629073fe62112d88605cb6c6ad421304c014d15f..23550d54ba8bd2dea84bdb4dde2fe1710136ab9d 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/Theme.java @@ -120,6 +120,8 @@ public interface Theme { public double getBarWidthPercentage(); + public boolean isOverlapped(); + // Error Bars /////////////////////////////// public Color getErrorBarsColor(); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java index 39fb848b98910a8946789abc1d51c483ff129834..148799543c98be5430a35aa124fc08317c45d02f 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/style/XChartTheme.java @@ -287,6 +287,12 @@ public class XChartTheme implements Theme { return 0.9; } + @Override + public boolean isOverlapped() { + + return false; + } + // Error Bars /////////////////////////////// @Override