Skip to content
Snippets Groups Projects
Commit 31b201d4 authored by Tim Molter's avatar Tim Molter
Browse files

make series rendering dependent on series type, not chart type

parent c8d4bde0
Branches
No related tags found
No related merge requests found
...@@ -103,30 +103,30 @@ public class Chart { ...@@ -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 seriesName
* @param xData the X-Axis data * @param xData the X-Axis data
* @param yData the Y-Axis data * @param yData the Y-Axis data
* @param errorBars the error bar data
* @return A Series object that you can set properties on * @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 seriesName
* @param xData the X-Axis data * @param xData the X-Axis data
* @param yData the Y-Axis data * @param yData the Y-Axis data
* @param errorBars the error bar data
* @return A Series object that you can set properties on * @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 { ...@@ -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 { ...@@ -218,7 +218,7 @@ public class Chart {
} }
} }
return chartPainter.getAxisPair().addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber); return addSeries(seriesName, xDataNumber, yDataNumber, errorBarDataNumber);
} }
/** /**
......
...@@ -35,9 +35,11 @@ import org.knowm.xchart.internal.style.SeriesColorMarkerLineStyle; ...@@ -35,9 +35,11 @@ import org.knowm.xchart.internal.style.SeriesColorMarkerLineStyle;
public class Series { public class Series {
public enum SeriesType { public enum SeriesType {
Line, Area Line, Scatter, Area, Bar
} }
private SeriesType seriesType = null;
private String name = ""; private String name = "";
private List<?> xData; private List<?> xData;
...@@ -46,8 +48,6 @@ public class Series { ...@@ -46,8 +48,6 @@ public class Series {
private List<? extends Number> yData; private List<? extends Number> yData;
private AxisType yAxisType; private AxisType yAxisType;
private SeriesType seriesType;
private List<? extends Number> errorBars; private List<? extends Number> errorBars;
/** the minimum value of axis range */ /** the minimum value of axis range */
...@@ -108,6 +108,7 @@ public class Series { ...@@ -108,6 +108,7 @@ public class Series {
stroke = seriesColorMarkerLineStyle.getStroke(); stroke = seriesColorMarkerLineStyle.getStroke();
calculateMinMax(); calculateMinMax();
} }
/** /**
......
...@@ -34,9 +34,6 @@ import org.knowm.xchart.internal.style.XChartTheme; ...@@ -34,9 +34,6 @@ import org.knowm.xchart.internal.style.XChartTheme;
*/ */
public class StyleManager { public class StyleManager {
/**
* Note: For Area Charts, the X-Axis data must be in ascending order.
*/
public enum ChartType { public enum ChartType {
Line, Scatter, Area, Bar Line, Scatter, Area, Bar
......
...@@ -124,13 +124,34 @@ public class AxisPair implements ChartPart { ...@@ -124,13 +124,34 @@ public class AxisPair implements ChartPart {
series = new Series(seriesName, generatedXData, xAxis.getAxisType(), yData, yAxis.getAxisType(), errorBars, seriesColorMarkerLineStyleCycler.getNextSeriesColorMarkerLineStyle()); 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()) { switch (chartPainter.getStyleManager().getChartType()) {
case Line:
if (series.getSeriesType() == null) {
series.setSeriesType(Series.SeriesType.Line);
}
break;
case Area: case Area:
if (series.getSeriesType() == null) {
series.setSeriesType(Series.SeriesType.Area); series.setSeriesType(Series.SeriesType.Area);
}
break; break;
case Line: 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); series.setSeriesType(Series.SeriesType.Line);
} }
break;
}
if (seriesMap.keySet().contains(seriesName)) { if (seriesMap.keySet().contains(seriesName)) {
throw new IllegalArgumentException("Series name >" + seriesName + "< has already been used. Use unique names for each series!!!"); throw new IllegalArgumentException("Series name >" + seriesName + "< has already been used. Use unique names for each series!!!");
......
...@@ -28,7 +28,6 @@ import java.util.LinkedHashMap; ...@@ -28,7 +28,6 @@ import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import org.knowm.xchart.Series; import org.knowm.xchart.Series;
import org.knowm.xchart.StyleManager.ChartType;
/** /**
* @author timmolter * @author timmolter
...@@ -71,7 +70,7 @@ public class Legend implements ChartPart { ...@@ -71,7 +70,7 @@ public class Legend implements ChartPart {
return; return;
} }
boolean isBar = getChartPainter().getStyleManager().getChartType() == ChartType.Bar; boolean containsBar = false;
// determine legend text content max width // determine legend text content max width
double legendTextContentMaxWidth = 0; double legendTextContentMaxWidth = 0;
...@@ -90,14 +89,18 @@ public class Legend implements ChartPart { ...@@ -90,14 +89,18 @@ public class Legend implements ChartPart {
} }
blockHeight -= MULTI_LINE_SPACE; 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(); legendContentHeight += blockHeight + getChartPainter().getStyleManager().getLegendPadding();
if (series.getSeriesType() == Series.SeriesType.Bar) {
containsBar = true;
}
} }
// determine legend content width // determine legend content width
double legendContentWidth = 0; double legendContentWidth = 0;
if (!isBar) { if (!containsBar) {
legendContentWidth = getChartPainter().getStyleManager().getLegendSeriesLineLength() + getChartPainter().getStyleManager().getLegendPadding() + legendTextContentMaxWidth; legendContentWidth = getChartPainter().getStyleManager().getLegendSeriesLineLength() + getChartPainter().getStyleManager().getLegendPadding() + legendTextContentMaxWidth;
} }
else { else {
...@@ -181,12 +184,12 @@ public class Legend implements ChartPart { ...@@ -181,12 +184,12 @@ public class Legend implements ChartPart {
} }
blockHeight -= MULTI_LINE_SPACE; 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 // 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.setColor(series.getStrokeColor());
g.setStroke(series.getStroke()); g.setStroke(series.getStroke());
Shape line = new Line2D.Double(startx, starty + blockHeight / 2.0, startx + getChartPainter().getStyleManager().getLegendSeriesLineLength(), starty + blockHeight / 2.0); 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 { ...@@ -206,7 +209,8 @@ public class Legend implements ChartPart {
} }
} }
else { else { // bar type series
// paint little box // paint little box
if (series.getStroke() != null) { if (series.getStroke() != null) {
g.setColor(series.getStrokeColor()); g.setColor(series.getStrokeColor());
...@@ -220,12 +224,12 @@ public class Legend implements ChartPart { ...@@ -220,12 +224,12 @@ public class Legend implements ChartPart {
// g.draw(boundsTemp); // g.draw(boundsTemp);
} }
// paint series text // paint series text /////////////////////////////////////////////////////
g.setColor(chartPainter.getStyleManager().getChartFontColor()); g.setColor(chartPainter.getStyleManager().getChartFontColor());
double multiLineOffset = 0.0; 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(); double x = startx + getChartPainter().getStyleManager().getLegendSeriesLineLength() + getChartPainter().getStyleManager().getLegendPadding();
for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) { for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) {
...@@ -253,7 +257,7 @@ public class Legend implements ChartPart { ...@@ -253,7 +257,7 @@ public class Legend implements ChartPart {
starty += blockHeight + getChartPainter().getStyleManager().getLegendPadding(); starty += blockHeight + getChartPainter().getStyleManager().getLegendPadding();
} }
else { else { // bar type series
final double x = startx + BOX_SIZE + getChartPainter().getStyleManager().getLegendPadding(); final double x = startx + BOX_SIZE + getChartPainter().getStyleManager().getLegendPadding();
for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) { for (Map.Entry<String, Rectangle2D> entry : seriesTextBounds.entrySet()) {
......
...@@ -28,7 +28,6 @@ import java.util.Iterator; ...@@ -28,7 +28,6 @@ import java.util.Iterator;
import org.knowm.xchart.Series; import org.knowm.xchart.Series;
import org.knowm.xchart.StyleManager; import org.knowm.xchart.StyleManager;
import org.knowm.xchart.StyleManager.ChartType;
import org.knowm.xchart.internal.Utils; import org.knowm.xchart.internal.Utils;
import org.knowm.xchart.internal.chartpart.Axis.AxisType; import org.knowm.xchart.internal.chartpart.Axis.AxisType;
...@@ -193,7 +192,9 @@ public class PlotContentLineChart extends PlotContent { ...@@ -193,7 +192,9 @@ public class PlotContentLineChart extends PlotContent {
// System.out.println(yTransform); // System.out.println(yTransform);
// paint line // 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 (series.getStroke() != null) {
if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) { if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) {
g.setColor(series.getStrokeColor()); g.setColor(series.getStrokeColor());
...@@ -202,9 +203,10 @@ public class PlotContentLineChart extends PlotContent { ...@@ -202,9 +203,10 @@ public class PlotContentLineChart extends PlotContent {
g.draw(line); g.draw(line);
} }
} }
}
// paint area // 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) { if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment