diff --git a/xchart/src/main/java/org/knowm/xchart/Chart.java b/xchart/src/main/java/org/knowm/xchart/Chart.java index b19f2f09632c3592cf11f2cdbdadadd333df5841..94c1b1ef90142350ec94de7a80b663e3124433f7 100644 --- a/xchart/src/main/java/org/knowm/xchart/Chart.java +++ b/xchart/src/main/java/org/knowm/xchart/Chart.java @@ -103,30 +103,30 @@ public class Chart { } /** - * Add a series to the chart using Collections + * Add a Number series to the chart using Collections with error bars * * @param seriesName * @param xData the X-Axis data * @param yData the Y-Axis data + * @param errorBars the error bar data * @return A Series object that you can set properties on */ - public Series addSeries(String seriesName, List<?> xData, List<? extends Number> yData) { + public Series addSeries(String seriesName, List<?> xData, List<? extends Number> yData, List<? extends Number> errorBars) { - return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, null); + return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, errorBars); } /** - * Add a Number series to the chart using Collections with error bars + * Add a series to the chart using Collections * * @param seriesName * @param xData the X-Axis data * @param yData the Y-Axis data - * @param errorBars the error bar data * @return A Series object that you can set properties on */ - public Series addSeries(String seriesName, List<?> xData, List<? extends Number> yData, List<? extends Number> errorBars) { + public Series addSeries(String seriesName, List<?> xData, List<? extends Number> yData) { - return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, errorBars); + return addSeries(seriesName, xData, yData, null); } /** @@ -172,7 +172,7 @@ public class Chart { } } - return chartPainter.getAxisPair().addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber); + return addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber); } /** @@ -218,7 +218,7 @@ public class Chart { } } - return chartPainter.getAxisPair().addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber); + return addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber); } /** diff --git a/xchart/src/main/java/org/knowm/xchart/Series.java b/xchart/src/main/java/org/knowm/xchart/Series.java index f5d1d66f0654d02a8aafb82a1a2bfa342aa400d3..63fa0799d04062451c00893bb30d7cbae633e43d 100644 --- a/xchart/src/main/java/org/knowm/xchart/Series.java +++ b/xchart/src/main/java/org/knowm/xchart/Series.java @@ -35,9 +35,11 @@ import org.knowm.xchart.internal.style.SeriesColorMarkerLineStyle; public class Series { public enum SeriesType { - Line, Area + Line, Scatter, Area, Bar } + private SeriesType seriesType = null; + private String name = ""; private List<?> xData; @@ -46,8 +48,6 @@ public class Series { private List<? extends Number> yData; private AxisType yAxisType; - private SeriesType seriesType; - private List<? extends Number> errorBars; /** the minimum value of axis range */ @@ -108,6 +108,7 @@ public class Series { stroke = seriesColorMarkerLineStyle.getStroke(); calculateMinMax(); + } /** diff --git a/xchart/src/main/java/org/knowm/xchart/StyleManager.java b/xchart/src/main/java/org/knowm/xchart/StyleManager.java index ad084568bbefe93829379dcf7674d9431e790948..a7dc1ed09954ac0ba8122cb770c3f9fcc02c6860 100644 --- a/xchart/src/main/java/org/knowm/xchart/StyleManager.java +++ b/xchart/src/main/java/org/knowm/xchart/StyleManager.java @@ -34,9 +34,6 @@ import org.knowm.xchart.internal.style.XChartTheme; */ public class StyleManager { - /** - * Note: For Area Charts, the X-Axis data must be in ascending order. - */ public enum ChartType { Line, Scatter, Area, Bar diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisPair.java index a874dd98711f64746d750f392ae26f0000ac4149..ca332510bef101406ebf1c76c924969dbe60e170 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisPair.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisPair.java @@ -124,12 +124,33 @@ public class AxisPair implements ChartPart { series = new Series(seriesName, generatedXData, xAxis.getAxisType(), yData, yAxis.getAxisType(), errorBars, seriesColorMarkerLineStyleCycler.getNextSeriesColorMarkerLineStyle()); } + // set series type based on chart type, but only if it's not explicitly set on the series yet. switch (chartPainter.getStyleManager().getChartType()) { + case Line: + if (series.getSeriesType() == null) { + series.setSeriesType(Series.SeriesType.Line); + } + break; case Area: - series.setSeriesType(Series.SeriesType.Area); + if (series.getSeriesType() == null) { + series.setSeriesType(Series.SeriesType.Area); + } + break; + case Scatter: + if (series.getSeriesType() == null) { + series.setSeriesType(Series.SeriesType.Scatter); + } + break; + case Bar: + if (series.getSeriesType() == null) { + series.setSeriesType(Series.SeriesType.Bar); + } + break; + default: + if (series.getSeriesType() == null) { + series.setSeriesType(Series.SeriesType.Line); + } break; - case Line: - series.setSeriesType(Series.SeriesType.Line); } if (seriesMap.keySet().contains(seriesName)) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java index c8083fc30f3d4ef193845a04fa19110d3e5e45e8..7827a3db1e308dcf2c299c3e06c10c1c884a631f 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java @@ -28,7 +28,6 @@ import java.util.LinkedHashMap; import java.util.Map; import org.knowm.xchart.Series; -import org.knowm.xchart.StyleManager.ChartType; /** * @author timmolter @@ -71,7 +70,7 @@ public class Legend implements ChartPart { return; } - boolean isBar = getChartPainter().getStyleManager().getChartType() == ChartType.Bar; + boolean containsBar = false; // determine legend text content max width double legendTextContentMaxWidth = 0; @@ -90,14 +89,18 @@ public class Legend implements ChartPart { } blockHeight -= MULTI_LINE_SPACE; - blockHeight = Math.max(blockHeight, isBar ? BOX_SIZE : getChartPainter().getStyleManager().getMarkerSize()); + blockHeight = Math.max(blockHeight, series.getSeriesType() == Series.SeriesType.Bar ? BOX_SIZE : getChartPainter().getStyleManager().getMarkerSize()); legendContentHeight += blockHeight + getChartPainter().getStyleManager().getLegendPadding(); + + if (series.getSeriesType() == Series.SeriesType.Bar) { + containsBar = true; + } } // determine legend content width double legendContentWidth = 0; - if (!isBar) { + if (!containsBar) { legendContentWidth = getChartPainter().getStyleManager().getLegendSeriesLineLength() + getChartPainter().getStyleManager().getLegendPadding() + legendTextContentMaxWidth; } else { @@ -181,12 +184,12 @@ public class Legend implements ChartPart { } blockHeight -= MULTI_LINE_SPACE; - blockHeight = Math.max(blockHeight, getChartPainter().getStyleManager().getChartType() == ChartType.Bar ? BOX_SIZE : getChartPainter().getStyleManager().getMarkerSize()); + blockHeight = Math.max(blockHeight, series.getSeriesType() == Series.SeriesType.Bar ? BOX_SIZE : getChartPainter().getStyleManager().getMarkerSize()); - if (getChartPainter().getStyleManager().getChartType() != ChartType.Bar) { + if (series.getSeriesType() != Series.SeriesType.Bar) { // paint line - if (getChartPainter().getStyleManager().getChartType() != ChartType.Scatter && series.getStroke() != null) { + if (series.getSeriesType() != Series.SeriesType.Scatter && series.getStroke() != null) { g.setColor(series.getStrokeColor()); g.setStroke(series.getStroke()); Shape line = new Line2D.Double(startx, starty + blockHeight / 2.0, startx + getChartPainter().getStyleManager().getLegendSeriesLineLength(), starty + blockHeight / 2.0); @@ -206,7 +209,8 @@ public class Legend implements ChartPart { } } - else { + else { // bar type series + // paint little box if (series.getStroke() != null) { g.setColor(series.getStrokeColor()); @@ -220,12 +224,12 @@ public class Legend implements ChartPart { // g.draw(boundsTemp); } - // paint series text + // paint series text ///////////////////////////////////////////////////// g.setColor(chartPainter.getStyleManager().getChartFontColor()); double multiLineOffset = 0.0; - if (getChartPainter().getStyleManager().getChartType() != ChartType.Bar) { + if (series.getSeriesType() != Series.SeriesType.Bar) { double x = startx + getChartPainter().getStyleManager().getLegendSeriesLineLength() + getChartPainter().getStyleManager().getLegendPadding(); for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) { @@ -253,7 +257,7 @@ public class Legend implements ChartPart { starty += blockHeight + getChartPainter().getStyleManager().getLegendPadding(); } - else { + else { // bar type series final double x = startx + BOX_SIZE + getChartPainter().getStyleManager().getLegendPadding(); for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContentLineChart.java index 2dd4d2b46effc488532e50fcee4911d2d41ed547..d496691c23faf330510ab39f4c0bc10b5ca4922b 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContentLineChart.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContentLineChart.java @@ -28,7 +28,6 @@ import java.util.Iterator; import org.knowm.xchart.Series; import org.knowm.xchart.StyleManager; -import org.knowm.xchart.StyleManager.ChartType; import org.knowm.xchart.internal.Utils; import org.knowm.xchart.internal.chartpart.Axis.AxisType; @@ -193,18 +192,21 @@ public class PlotContentLineChart extends PlotContent { // System.out.println(yTransform); // paint line - if (series.getStroke() != null && getChartPainter().getStyleManager().getChartType() != ChartType.Scatter) { + if (Series.SeriesType.Line.equals(series.getSeriesType()) || Series.SeriesType.Area.equals(series.getSeriesType())) { - if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) { - g.setColor(series.getStrokeColor()); - g.setStroke(series.getStroke()); - Shape line = new Line2D.Double(previousX, previousY, xOffset, yOffset); - g.draw(line); + if (series.getStroke() != null) { + + if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) { + g.setColor(series.getStrokeColor()); + g.setStroke(series.getStroke()); + Shape line = new Line2D.Double(previousX, previousY, xOffset, yOffset); + g.draw(line); + } } } // paint area - if (getChartPainter().getStyleManager().getChartType() == ChartType.Area || Series.SeriesType.Area.equals(series.getSeriesType())) { + if (Series.SeriesType.Area.equals(series.getSeriesType())) { if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) {