diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java index 6c16a872d84efc5ae6ce12b7f49ea4dcdf555f06..35b46b9b5e4fd1ac351e5f8fe27e24b54168c38e 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java @@ -60,6 +60,7 @@ import org.knowm.xchart.demo.charts.line.LineChart05; import org.knowm.xchart.demo.charts.line.LineChart06; import org.knowm.xchart.demo.charts.line.LineChart07; import org.knowm.xchart.demo.charts.pie.PieChart01; +import org.knowm.xchart.demo.charts.pie.PieChart02; import org.knowm.xchart.demo.charts.realtime.RealtimeChart01; import org.knowm.xchart.demo.charts.realtime.RealtimeChart02; import org.knowm.xchart.demo.charts.realtime.RealtimeChart03; @@ -227,6 +228,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("PieChart01 - Pie Chart with 4 Slices", new PieChart01().getChart())); category.add(defaultMutableTreeNode); + defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("PieChart012 - Pie Chart Custom Color Palette", new PieChart02().getChart())); + category.add(defaultMutableTreeNode); + // Line category category = new DefaultMutableTreeNode("Line Charts"); top.add(category); diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java index 3ab595495aadb5726f4b14d71979e070b717dccb..6c28e9f37569030c1613d029c85f7ea50a550b14 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java @@ -42,11 +42,11 @@ public class PieChart01 implements ExampleChart<Chart_Pie> { public Chart_Pie getChart() { // Create Chart - Chart_Pie chart = new ChartBuilderPie().width(800).height(600).title(getClass().getSimpleName()).build(); - chart.addSeries("Pennies", 387); - chart.addSeries("Nickels", 234); - chart.addSeries("Dimes", 190); - chart.addSeries("Quarters", 270); + Chart_Pie chart = new ChartBuilderPie().width(400).height(500).title(getClass().getSimpleName()).build(); + chart.addSeries("Pennies", 100); + chart.addSeries("Nickels", 100); + chart.addSeries("Dimes", 100); + chart.addSeries("Quarters", 100); return chart; } diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java index 268fe317f1d6755e68b2e8e03a5f2a28048ecdd2..1dbb2956f02f29477f35aa613573d526ff39d707 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java @@ -20,12 +20,11 @@ import java.awt.Color; import org.knowm.xchart.ChartBuilderPie; import org.knowm.xchart.Chart_Pie; -import org.knowm.xchart.Series_Pie; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; /** - * Pie Chart with 4 Slices + * Pie Chart Custom Color Palette * <p> * Demonstrates the following: * <ul> @@ -49,8 +48,7 @@ public class PieChart02 implements ExampleChart<Chart_Pie> { Chart_Pie chart = new ChartBuilderPie().width(800).height(600).title(getClass().getSimpleName()).build(); chart.addSeries("Gold", 24); chart.addSeries("Silver", 21); - Series_Pie series = chart.addSeries("Platinum", 39); - + chart.addSeries("Platinum", 39); chart.addSeries("Copper", 17); chart.addSeries("Zinc", 40); diff --git a/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java b/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java index b78b68bcad616ebd674222d6ac7f85d39fe73941..c13a82d32c08f8d1e8b91b7c01a4c7738c2921e8 100644 --- a/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java +++ b/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java @@ -29,6 +29,7 @@ public class StyleManagerPie extends StyleManager { private double pieFillPercentage; private boolean isCircular; + private double startAngleInDegrees; /** * Constructor @@ -92,6 +93,21 @@ public class StyleManagerPie extends StyleManager { this.isCircular = isCircular; } + public double getStartAngleInDegrees() { + + return startAngleInDegrees; + } + + /** + * Sets the start angle in degrees. Zero degrees is straight up. + * + * @param startAngleInDegrees + */ + public void setStartAngleInDegrees(double startAngleInDegrees) { + + this.startAngleInDegrees = startAngleInDegrees; + } + /** * Set the theme the style manager should use * diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java index 5772a09c4418784a2b6104e231b1dec9bc1dc300..a42526967a45bf6bb74f3ff6056d7b9ead2153ad 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java @@ -109,7 +109,6 @@ public class ChartTitle implements ChartPart { double width = 2 * chart.getStyleManager().getChartTitlePadding() + rectangle.getWidth(); double height = 2 * chart.getStyleManager().getChartTitlePadding() + rectangle.getHeight(); return new Rectangle2D.Double(Double.NaN, Double.NaN, width, height); // Double.NaN indicates not sure yet. - } else { // TODO make this zero, need to account for null bounds then when laying out plot 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 e5310d1ed79b00959b1e4a12308d977c568d2202..284f0f821c0d5eff51578b631f80fb2191941953 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 @@ -16,6 +16,7 @@ */ package org.knowm.xchart.internal.chartpart; +import java.awt.BasicStroke; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.font.FontRenderContext; @@ -39,9 +40,11 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen protected static final int BOX_SIZE = 20; protected static final int MULTI_LINE_SPACE = 3; + protected Chart<SM, S> chart; protected Rectangle2D bounds = null; - protected Chart<SM, S> chart; + protected double xOffset = 0; + protected double yOffset = 0; /** * Constructor @@ -57,10 +60,6 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen @Override public void paint(Graphics2D g) { - if (!chart.getStyleManager().isLegendVisible()) { - return; - } - // if the area to draw a chart on is so small, don't even bother if (chart.getPlot().getBounds().getWidth() < 30) { return; @@ -71,6 +70,46 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen if (bounds == null) { // No other part asked for the bounds yet. Probably because it's an "inside" legend location bounds = getBoundsHint(); // Actually, the only information contained in thsi bounds is the width and height. } + + // legend draw position + + switch (chart.getStyleManager().getLegendPosition()) { + case OutsideE: + xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding(); + yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0; + break; + case InsideNW: + xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; + yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; + break; + case InsideNE: + xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; + yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; + break; + case InsideSE: + xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; + yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; + break; + case InsideSW: + xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; + yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; + break; + case InsideN: + xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN; + yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; + break; + + default: + break; + } + + // draw legend box background and border + Shape rect = new Rectangle2D.Double(xOffset, yOffset, bounds.getWidth(), bounds.getHeight()); + g.setColor(chart.getStyleManager().getLegendBackgroundColor()); + g.fill(rect); + g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f)); + g.setColor(chart.getStyleManager().getLegendBorderColor()); + g.draw(rect); } /** @@ -90,7 +129,6 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen // determine total legend content height double legendContentHeight = 0; - // TODO 3.0.0 figure out this warning. Map<String, S> map = chart.getSeriesMap(); for (Series series : map.values()) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java index ffb4f89d0cfe285b96d9c59fe4628659c6981e62..8c867bfd5a36de42e8c10ebb75738459bbfc50d2 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java @@ -54,56 +54,18 @@ public class LegendAxesChart<SM extends StyleManagerAxesChart, S extends Series> @Override public void paint(Graphics2D g) { - super.paint(g); - - // legend draw position - double xOffset = 0; - double yOffset = 0; - switch (chart.getStyleManager().getLegendPosition()) { - case OutsideE: - xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding(); - yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0; - break; - case InsideNW: - xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - case InsideNE: - xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - case InsideSE: - xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; - break; - case InsideSW: - xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; - break; - case InsideN: - xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - - default: - break; + if (!chart.getStyleManager().isLegendVisible()) { + return; } - // TODO need this stroke? - g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f)); + super.paint(g); - // draw legend box background and border - Shape rect = new Rectangle2D.Double(xOffset + 1, yOffset + 1, bounds.getWidth() - 2, bounds.getHeight() - 2); - g.setColor(chart.getStyleManager().getLegendBackgroundColor()); - g.fill(rect); - g.setColor(chart.getStyleManager().getLegendBorderColor()); - g.draw(rect); + g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f)); // Draw legend content inside legend box double startx = xOffset + chart.getStyleManager().getLegendPadding(); double starty = yOffset + chart.getStyleManager().getLegendPadding(); - // TODO 3.0.0 figure out this warning. Map<String, Series_AxesChart> map = chart.getSeriesMap(); for (Series_AxesChart series : map.values()) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java index 33cbabcfa14c832c16b734e2a885094b47b93631..9e1a87dc3486dc5b9cdfc195677a30bf677140fc 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java @@ -51,56 +51,18 @@ public class LegendPie<SM extends StyleManagerAxesChart, S extends Series> exten @Override public void paint(Graphics2D g) { - super.paint(g); - - // legend draw position - double xOffset = 0; - double yOffset = 0; - switch (chart.getStyleManager().getLegendPosition()) { - case OutsideE: - xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding(); - yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0; - break; - case InsideNW: - xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - case InsideNE: - xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - case InsideSE: - xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; - break; - case InsideSW: - xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN; - break; - case InsideN: - xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN; - yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN; - break; - - default: - break; + if (!chart.getStyleManager().isLegendVisible()) { + return; } - // TODO need this stroke? - g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f)); + super.paint(g); - // draw legend box background and border - Shape rect = new Rectangle2D.Double(xOffset + 1, yOffset + 1, bounds.getWidth() - 2, bounds.getHeight() - 2); - g.setColor(chart.getStyleManager().getLegendBackgroundColor()); - g.fill(rect); - g.setColor(chart.getStyleManager().getLegendBorderColor()); - g.draw(rect); + g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f)); // Draw legend content inside legend box double startx = xOffset + chart.getStyleManager().getLegendPadding(); double starty = yOffset + chart.getStyleManager().getLegendPadding(); - // TODO 3.0.0 figure out this warning. Map<String, Series> map = chart.getSeriesMap(); for (Series series : map.values()) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java index 768d1a0fb09f6dadb6d4c7506df93a3e845d9e5b..25261cba83e1ae46f99d3772439276304b49c2c0 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java @@ -17,8 +17,13 @@ package org.knowm.xchart.internal.chartpart; import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.font.FontRenderContext; +import java.awt.font.TextLayout; +import java.awt.geom.AffineTransform; import java.awt.geom.Arc2D; import java.awt.geom.Rectangle2D; +import java.text.DecimalFormat; import java.util.Map; import org.knowm.xchart.Series_Pie; @@ -32,6 +37,7 @@ import org.knowm.xchart.internal.style.StyleManager; public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends PlotContent_ { StyleManagerPie styleManagerPie; + DecimalFormat df = new DecimalFormat("#.0"); /** * Constructor @@ -66,14 +72,14 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends g.setClip(bounds.createIntersection(rectangle)); // pie bounds - double percentage = styleManagerPie.getPieFillPercentage(); + double pieFillPercentage = styleManagerPie.getPieFillPercentage(); // if (styleManagerPie.isCircular()) { // // double pieDiameter = Math.min(bounds.getWidth(), bounds.getHeight()); // } - double halfBorderPercentage = (1 - percentage) / 2.0; + double halfBorderPercentage = (1 - pieFillPercentage) / 2.0; double width = styleManagerPie.isCircular() ? Math.min(bounds.getWidth(), bounds.getHeight()) : bounds.getWidth(); double height = styleManagerPie.isCircular() ? Math.min(bounds.getWidth(), bounds.getHeight()) : bounds.getHeight(); @@ -83,9 +89,9 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends bounds.getY() + bounds.getHeight() / 2 - height / 2 + halfBorderPercentage * height, - width * percentage, + width * pieFillPercentage, - height * percentage); + height * pieFillPercentage); // g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); // g.setColor(Color.black); @@ -94,7 +100,6 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends // get total double total = 0.0; - // TODO 3.0.0 figure out this warning. Map<String, Series_Pie> map = chart.getSeriesMap(); for (Series_Pie series : map.values()) { @@ -102,21 +107,59 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends } // draw pie slices - double curValue = 0.0; - double startAngle = 0; - // TODO 3.0.0 figure out this warning. + // double curValue = 0.0; + // double curValue = 0.0; + double startAngle = styleManagerPie.getStartAngleInDegrees() + 90; + map = chart.getSeriesMap(); for (Series_Pie series : map.values()) { Number y = series.getValue(); - startAngle = (curValue * 360 / total); + // draw slice double arcAngle = (y.doubleValue() * 360 / total); g.setColor(series.getFillColor()); g.fill(new Arc2D.Double(pieBounds.getX(), pieBounds.getY(), pieBounds.getWidth(), pieBounds.getHeight(), startAngle, arcAngle, Arc2D.PIE)); g.setColor(styleManagerPie.getPlotBackgroundColor()); g.draw(new Arc2D.Double(pieBounds.getX(), pieBounds.getY(), pieBounds.getWidth(), pieBounds.getHeight(), startAngle, arcAngle, Arc2D.PIE)); - curValue += y.doubleValue(); + // curValue += y.doubleValue(); + + // draw percentage on slice + double percentage = y.doubleValue() / total * 100; + + TextLayout textLayout = new TextLayout(df.format(percentage) + "%", chart.getStyleManager().getLegendFont(), new FontRenderContext(null, true, false)); + Rectangle2D percentageRectangle = textLayout.getBounds(); + + double xCenter = pieBounds.getX() + pieBounds.getWidth() / 2 - percentageRectangle.getWidth() / 2; + double yCenter = pieBounds.getY() + pieBounds.getHeight() / 2 + percentageRectangle.getHeight() / 2; + double angle = (arcAngle + startAngle) - arcAngle / 2; + double xOffset = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 3.33); + double yOffset = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 3.33); + + g.setColor(styleManagerPie.getChartFontColor()); + g.setFont(styleManagerPie.getChartTitleFont()); + + Shape shape = textLayout.getOutline(null); + AffineTransform orig = g.getTransform(); + AffineTransform at = new AffineTransform(); + at.translate(xOffset, yOffset); + g.transform(at); + g.fill(shape); + g.setTransform(orig); + + // // Tick Mark + // xCenter = pieBounds.getX() + pieBounds.getWidth() / 2; + // yCenter = pieBounds.getY() + pieBounds.getHeight() / 2; + // double xOffsetStart = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 2.01); + // double xOffsetEnd = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 1.9); + // double yOffsetStart = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 2.01); + // double yOffsetEnd = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 1.9); + // + // g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)); + // Shape line = new Line2D.Double(xOffsetStart, yOffsetStart, xOffsetEnd, yOffsetEnd); + // g.draw(line); + + startAngle += arcAngle; } g.setClip(null); diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java index 29534e056fa270a7336a1d65652a7e62fd668549..ad7cc892cd01bb2ccc2312d86e5122d1d47c5142 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java @@ -104,7 +104,6 @@ public class PlotContent_XY<SM extends StyleManagerAxesChart, S extends Series> yMax = Math.log10(yMax); } - // TODO 3.0.0 figure out this warning. Map<String, Series_XY> map = chart.getSeriesMap(); for (Series_XY series : map.values()) { diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java index e8086333037e036ed09f963029be0965fced0aa3..bc254faa7eb7ad01c5b291ef643d1d10ec061c73 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java @@ -348,6 +348,12 @@ public class GGPlot2Theme implements Theme { return true; } + @Override + public double getStartAngleInDegrees() { + + return 0; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java index 59ed862dd31538ad334e589eeeab2110f7d8e2ce..c7477fd63f16b0330fba6920365dbe5f2285c9ee 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java @@ -352,6 +352,12 @@ public class MatlabTheme implements Theme { return true; } + @Override + public double getStartAngleInDegrees() { + + return 0; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java index 2297cfaf16a96df688806ff525bb9c282957cb40..133fb521faa10782c818b154b426343a50abf1ac 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java @@ -138,6 +138,8 @@ public interface Theme extends SeriesMarkers, SeriesLines, SeriesColors { public boolean isCircular(); + public double getStartAngleInDegrees(); + // Line, Scatter, Area Charts /////////////////////////////// public int getMarkerSize(); diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java index 61e52800ee89edd47cf8bce20845db1c67d3b0d1..906d2f876aa8551f41334236ef16c4ca940cf3ec 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java @@ -348,6 +348,12 @@ public class XChartTheme implements Theme { return true; } + @Override + public double getStartAngleInDegrees() { + + return 0; + } + // Line, Scatter, Area Charts /////////////////////////////// @Override