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 705ed00e20c2cad22d0c859ffcf36fee19cdaad3..f2e23655010ea645bd677632f798036b1d2631e3 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 @@ -241,7 +241,7 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart06 - Logarithmic Y-Axis with Error Bars", new LineChart06().getChart())); category.add(defaultMutableTreeNode); - defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart07 - Line chart with multiple Category Series", new LineChart07().getChart())); + defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart07 - Line Chart with Multiple Category Series", new LineChart07().getChart())); category.add(defaultMutableTreeNode); // Scatter category diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/bar/BarChart02.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/bar/BarChart02.java index 01b9c1f39012e8db40a8743bc28b3b600c73cd8a..780a81a9c4b6968fb2ed18936c7380b7fb4f1230 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/bar/BarChart02.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/bar/BarChart02.java @@ -27,11 +27,11 @@ import java.util.Random; import org.knowm.xchart.Chart; import org.knowm.xchart.ChartBuilder; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.StyleManager.ChartTheme; import org.knowm.xchart.StyleManager.ChartType; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; +import org.knowm.xchart.internal.style.MatlabTheme; /** * Date Categories @@ -76,7 +76,7 @@ public class BarChart02 implements ExampleChart { yData.add(-1 * 0.00000001 * ((random.nextInt(i) + 1))); } Series series = chart.addCategorySeries("Model 77", xData, yData); - series.setLineColor(SeriesColor.RED); + series.setLineColor(MatlabTheme.RED); chart.getStyleManager().setPlotGridLinesVisible(false); chart.getStyleManager().setBarFilled(false); chart.getStyleManager().setDatePattern("YYYY"); diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart02.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart02.java index 7813658aa83cd9a793ac9fa37b858c6468721515..e4333adacdebb3aba4fc78c541250a26cefbc5c5 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart02.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart02.java @@ -21,11 +21,11 @@ import java.util.List; import org.knowm.xchart.Chart; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; +import org.knowm.xchart.internal.style.XChartTheme; /** * Sine wave with customized series style @@ -65,9 +65,9 @@ public class LineChart02 implements ExampleChart { // Series 1 Series series1 = chart.addSeries("y=sin(x)", xData, yData); - series1.setLineColor(SeriesColor.PURPLE); + series1.setLineColor(XChartTheme.PURPLE); series1.setLineStyle(SeriesLineStyle.DASH_DASH); - series1.setMarkerColor(SeriesColor.GREEN); + series1.setMarkerColor(XChartTheme.GREEN); series1.setMarker(SeriesMarker.SQUARE); return chart; diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart03.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart03.java index 55d8778149c98b656954f581a4444da14c454526..6a919496d08953361ac741e24f6e9614935eb011 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart03.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart03.java @@ -29,12 +29,12 @@ import java.util.Locale; import org.knowm.xchart.Chart; import org.knowm.xchart.ChartColor; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.StyleManager.LegendPosition; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; +import org.knowm.xchart.internal.style.XChartTheme; /** * Extensive Chart Customization @@ -102,7 +102,7 @@ public class LineChart03 implements ExampleChart { chart.getStyleManager().setLocale(Locale.GERMAN); Series series = chart.addSeries("Fake Data", xData, yData); - series.setLineColor(SeriesColor.BLUE); + series.setLineColor(XChartTheme.BLUE); series.setMarkerColor(Color.ORANGE); series.setMarker(SeriesMarker.CIRCLE); series.setLineStyle(SeriesLineStyle.SOLID); diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart04.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart04.java index 3f251761da72944055ccfaedd46a01eb72e91bbb..4925c568a8b76093800d7ee3a3b0d87ba9d1673e 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart04.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart04.java @@ -18,11 +18,11 @@ package org.knowm.xchart.demo.charts.line; import org.knowm.xchart.Chart; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; +import org.knowm.xchart.internal.style.XChartTheme; /** * Hundreds of Series on One Plot @@ -50,10 +50,10 @@ public class LineChart04 implements ExampleChart { for (int i = 0; i < 200; i++) { Series series = chart.addSeries("A" + i, new double[] { Math.random() / 1000, Math.random() / 1000 }, new double[] { Math.random() / -1000, Math.random() / -1000 }); - series.setLineColor(SeriesColor.BLUE); + series.setLineColor(XChartTheme.BLUE); series.setLineStyle(SeriesLineStyle.SOLID); series.setMarker(SeriesMarker.CIRCLE); - series.setMarkerColor(SeriesColor.BLUE); + series.setMarkerColor(XChartTheme.BLUE); } diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/theme/ThemeChart03.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/theme/ThemeChart03.java index 5a3990287472fe8ad84f8a470ab427132ddbd455..cfb4a6a667564bd956602c41ebee2e80a3a57ae5 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/theme/ThemeChart03.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/theme/ThemeChart03.java @@ -25,8 +25,6 @@ import java.util.List; import org.knowm.xchart.Chart; import org.knowm.xchart.ChartBuilder; -import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.StyleManager.ChartTheme; import org.knowm.xchart.SwingWrapper; import org.knowm.xchart.demo.charts.ExampleChart; @@ -104,8 +102,7 @@ public class ThemeChart03 implements ExampleChart { e.printStackTrace(); } - Series series1 = chart.addSeries("downloads", xData, y1Data); - series1.setLineStyle(SeriesLineStyle.DOT_DOT); + chart.addSeries("downloads", xData, y1Data); chart.addSeries("price", xData, y2Data); return chart; diff --git a/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarLogTest.java b/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarLogTest.java index ce8940cfc812f06ccb05ea8aafb961c0506864a8..845fa559b04b696acaf1eb58a45f1d3a71d7f24d 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarLogTest.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarLogTest.java @@ -20,10 +20,10 @@ import java.awt.Color; import org.knowm.xchart.Chart; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.SwingWrapper; +import org.knowm.xchart.internal.style.XChartTheme; /** * @author timmolter @@ -70,13 +70,13 @@ public class ErrorBarLogTest { series2.setMarker(SeriesMarker.NONE); - series2.setLineColor(SeriesColor.RED); + series2.setLineColor(XChartTheme.RED); series3.setLineStyle(SeriesLineStyle.DASH_DASH); series3.setMarker(SeriesMarker.NONE); - series3.setLineColor(SeriesColor.RED); + series3.setLineColor(XChartTheme.RED); new SwingWrapper(mychart).displayChart(); diff --git a/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarTest.java b/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarTest.java index d504888466f54a5c64fbd7082fabd0989f29a94f..9b8ff7400aacf1840f9232a97ec81cc2afcdd7cc 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarTest.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/standalone/ErrorBarTest.java @@ -20,10 +20,10 @@ import java.awt.Color; import org.knowm.xchart.Chart; import org.knowm.xchart.Series; -import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.SwingWrapper; +import org.knowm.xchart.internal.style.XChartTheme; /** * @author timmolter @@ -51,10 +51,10 @@ public class ErrorBarTest { series1.setMarkerColor(Color.MAGENTA); series2.setLineStyle(SeriesLineStyle.DASH_DASH); series2.setMarker(SeriesMarker.NONE); - series2.setLineColor(SeriesColor.RED); + series2.setLineColor(XChartTheme.RED); series3.setLineStyle(SeriesLineStyle.DASH_DASH); series3.setMarker(SeriesMarker.NONE); - series3.setLineColor(SeriesColor.RED); + series3.setLineColor(XChartTheme.RED); new SwingWrapper(mychart).displayChart(); } diff --git a/xchart/src/main/java/org/knowm/xchart/SeriesColor.java b/xchart/src/main/java/org/knowm/xchart/SeriesColor.java index 71444a2d0971b5bc924847585d565eaacb323144..756d504f80a25decf6fe29db7ffd3283f430f419 100644 --- a/xchart/src/main/java/org/knowm/xchart/SeriesColor.java +++ b/xchart/src/main/java/org/knowm/xchart/SeriesColor.java @@ -20,78 +20,37 @@ import java.awt.Color; /** * Pre-defined Colors used for Series Lines and Markers - * + * * @author timmolter */ -public enum SeriesColor { - - /** BLUE */ - BLUE(0, new Color(0, 55, 255, 180)), - - /** ORANGE */ - ORANGE(1, new Color(255, 172, 0, 180)), - - /** PURPLE */ - PURPLE(2, new Color(128, 0, 255, 180)), - - /** GREEN */ - GREEN(3, new Color(0, 205, 0, 180)), - - /** RED */ - RED(4, new Color(205, 0, 0, 180)), - - /** YELLOW */ - YELLOW(5, new Color(255, 215, 0, 180)), - - /** MAGENTA */ - MAGENTA(6, new Color(255, 0, 255, 180)), - - /** PINK */ - PINK(7, new Color(255, 166, 201, 180)), - - /** LIGHT_GREY */ - LIGHT_GREY(8, new Color(207, 207, 207, 180)), - - /** CYAN */ - CYAN(9, new Color(0, 255, 255, 180)), - - /** BROWN */ - BROWN(10, new Color(102, 56, 10, 180)), - - /** BLACK */ - BLACK(11, new Color(0, 0, 0, 180)); - - /** The index */ - private int index; +public class SeriesColor { /** The AWT Color */ private Color color; /** * Constructor - * - * @param index + * * @param color */ - private SeriesColor(int index, Color color) { + public SeriesColor(Color color) { - this.index = index; this.color = color; } /** - * Gets the SeriesColor's index - * - * @return + * Constructor + * + * @param color */ - public Integer getIndex() { + public SeriesColor(int r, int g, int b, int a) { - return index; + this.color = new Color(r, g, b, a); } /** * Gets the SeriesColor's AWT Color - * + * * @return the AWT Color */ public Color getColor() { @@ -99,15 +58,15 @@ public enum SeriesColor { return color; } - /** - * get the AWT Color given a SeriesColor - * - * @param seriesColor - * @return the AWT Color - */ - public Color getAWTColor(SeriesColor seriesColor) { - - return seriesColor.color; - } + // /** + // * get the AWT Color given a SeriesColor + // * + // * @param seriesColor + // * @return the AWT Color + // */ + // public Color getAWTColor(SeriesColor seriesColor) { + // + // return seriesColor.color; + // } } diff --git a/xchart/src/main/java/org/knowm/xchart/StyleManager.java b/xchart/src/main/java/org/knowm/xchart/StyleManager.java index e2ff4585d61bf6d131a26c66565b3045e76f45ad..8cb0d314fa32233a071579dce0542d076720d2c7 100644 --- a/xchart/src/main/java/org/knowm/xchart/StyleManager.java +++ b/xchart/src/main/java/org/knowm/xchart/StyleManager.java @@ -24,6 +24,7 @@ import java.util.TimeZone; import org.knowm.xchart.internal.style.GGPlot2Theme; import org.knowm.xchart.internal.style.MatlabTheme; +import org.knowm.xchart.internal.style.SeriesColorMarkerLineStyleCycler; import org.knowm.xchart.internal.style.Theme; import org.knowm.xchart.internal.style.XChartTheme; @@ -76,6 +77,7 @@ public class StyleManager { private Color chartBackgroundColor; public Color chartFontColor; private int chartPadding; + private SeriesColorMarkerLineStyleCycler seriesColorMarkerLineStyleCycler; // Chart Title /////////////////////////////// private Font chartTitleFont; @@ -168,6 +170,7 @@ public class StyleManager { chartBackgroundColor = theme.getChartBackgroundColor(); chartFontColor = theme.getChartFontColor(); chartPadding = theme.getChartPadding(); + seriesColorMarkerLineStyleCycler = theme.getSeriesColorMarkerLineStyleCycler(); // Chart Title /////////////////////////////// chartTitleFont = theme.getChartTitleFont(); @@ -322,6 +325,16 @@ public class StyleManager { return chartPadding; } + public SeriesColorMarkerLineStyleCycler getSeriesColorMarkerLineStyleCycler() { + + return seriesColorMarkerLineStyleCycler; + } + + public void setSeriesColorMarkerLineStyleCycler(SeriesColorMarkerLineStyleCycler seriesColorMarkerLineStyleCycler) { + + this.seriesColorMarkerLineStyleCycler = seriesColorMarkerLineStyleCycler; + } + // Chart Title /////////////////////////////// /** diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java index c3969dd91e80b28d70f1dbc2aad42f2f4d0a9cdd..ca5689171f93ed6f26131139a6b89e33d8c6ff42 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java @@ -30,7 +30,6 @@ import java.util.Map; import org.knowm.xchart.Series; import org.knowm.xchart.StyleManager; import org.knowm.xchart.internal.chartpart.Axis.AxisType; -import org.knowm.xchart.internal.style.SeriesColorMarkerLineStyleCycler; /** * @author timmolter @@ -48,7 +47,6 @@ public class ChartInternal { private ChartInternalType chartInternalType = null; private Map<String, Series> seriesMap = new LinkedHashMap<String, Series>(); - private SeriesColorMarkerLineStyleCycler seriesColorMarkerLineStyleCycler = new SeriesColorMarkerLineStyleCycler(); private final StyleManager styleManager; @@ -109,7 +107,7 @@ public class ChartInternal { } axisPair.getYAxis().setAxisType(AxisType.Number); - series = new Series(seriesName, xData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, seriesColorMarkerLineStyleCycler + series = new Series(seriesName, xData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, styleManager.getSeriesColorMarkerLineStyleCycler() .getNextSeriesColorMarkerLineStyle()); } else { // generate xData @@ -119,7 +117,7 @@ public class ChartInternal { } axisPair.getXAxis().setAxisType(AxisType.Number); axisPair.getYAxis().setAxisType(AxisType.Number); - series = new Series(seriesName, generatedXData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, seriesColorMarkerLineStyleCycler + series = new Series(seriesName, generatedXData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, styleManager.getSeriesColorMarkerLineStyleCycler() .getNextSeriesColorMarkerLineStyle()); } @@ -169,7 +167,7 @@ public class ChartInternal { setXAxisType(xData); axisPair.getYAxis().setAxisType(AxisType.Number); - Series series = new Series(seriesName, xData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, seriesColorMarkerLineStyleCycler + Series series = new Series(seriesName, xData, axisPair.getXAxis().getAxisType(), yData, axisPair.getYAxis().getAxisType(), errorBars, styleManager.getSeriesColorMarkerLineStyleCycler() .getNextSeriesColorMarkerLineStyle()); // set series type 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 24a6337bbb573091586b7f1add5e4adba5761349..06d5063c6aab404c4e485f3fc7fa06bd4af8e85b 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 @@ -20,8 +20,13 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Stroke; +import java.util.ArrayList; +import java.util.List; import org.knowm.xchart.ChartColor; +import org.knowm.xchart.SeriesColor; +import org.knowm.xchart.SeriesLineStyle; +import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.StyleManager.LegendPosition; /** @@ -29,6 +34,16 @@ import org.knowm.xchart.StyleManager.LegendPosition; */ public class GGPlot2Theme implements Theme { + // The color blind friendly palette + public static SeriesColor BLACK = new SeriesColor(0, 0, 0, 255); + public static SeriesColor ORANGE = new SeriesColor(230, 159, 0, 255); + public static SeriesColor SKY_BLUE = new SeriesColor(86, 180, 233, 255); + public static SeriesColor BLUISH_GREEN = new SeriesColor(0, 158, 115, 255); + public static SeriesColor YELLOW = new SeriesColor(240, 228, 66, 255); + public static SeriesColor BLUE = new SeriesColor(0, 114, 178, 255); + public static SeriesColor VERMILLION = new SeriesColor(213, 94, 0, 255); + public static SeriesColor REDDISH_PURPLE = new SeriesColor(204, 121, 167, 255); + // Chart Style /////////////////////////////// @Override @@ -49,6 +64,12 @@ public class GGPlot2Theme implements Theme { return 10; } + @Override + public SeriesColorMarkerLineStyleCycler getSeriesColorMarkerLineStyleCycler() { + + return new XChartSeriesColorMarkerLineStyleCycler(); + } + // Chart Title /////////////////////////////// @Override @@ -244,20 +265,18 @@ public class GGPlot2Theme implements Theme { return true; } - @Override public boolean isPlotGridVerticalLinesVisible() { return true; } - @Override public boolean isPlotGridHorizontalLinesVisible() { return true; } - + @Override public Color getPlotBackgroundColor() { @@ -335,4 +354,46 @@ public class GGPlot2Theme implements Theme { return false; } + + public class XChartSeriesColorMarkerLineStyleCycler extends SeriesColorMarkerLineStyleCycler { + + @Override + public List<SeriesColor> getSeriesColorList() { + + // 1. Color + List<SeriesColor> seriesColorMap = new ArrayList<SeriesColor>(); + seriesColorMap.add(BLACK); + seriesColorMap.add(ORANGE); + seriesColorMap.add(SKY_BLUE); + seriesColorMap.add(BLUISH_GREEN); + seriesColorMap.add(YELLOW); + seriesColorMap.add(BLUE); + seriesColorMap.add(VERMILLION); + seriesColorMap.add(REDDISH_PURPLE); + + return seriesColorMap; + } + + @Override + public List<SeriesMarker> getSeriesMarkerList() { + + // 2. Marker + List<SeriesMarker> seriesMarkerList = new ArrayList<SeriesMarker>(); + seriesMarkerList.add(SeriesMarker.CIRCLE); + seriesMarkerList.add(SeriesMarker.DIAMOND); + return seriesMarkerList; + } + + @Override + public List<SeriesLineStyle> getLineStyleList() { + + // 3. Stroke + List<SeriesLineStyle> seriesLineStyleList = new ArrayList<SeriesLineStyle>(); + seriesLineStyleList.add(SeriesLineStyle.SOLID); + seriesLineStyleList.add(SeriesLineStyle.DOT_DOT); + seriesLineStyleList.add(SeriesLineStyle.DASH_DASH); + return seriesLineStyleList; + } + + } } 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 f0b3f780766798f436ff2fc848d10f1cf105dbd4..8996dde5939b078e418665ef002f3fce255cd57e 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 @@ -20,8 +20,13 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Stroke; +import java.util.ArrayList; +import java.util.List; import org.knowm.xchart.ChartColor; +import org.knowm.xchart.SeriesColor; +import org.knowm.xchart.SeriesLineStyle; +import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.StyleManager.LegendPosition; /** @@ -29,6 +34,14 @@ import org.knowm.xchart.StyleManager.LegendPosition; */ public class MatlabTheme implements Theme { + public static SeriesColor BLUE = new SeriesColor(0, 0, 255, 255); + public static SeriesColor GREEN = new SeriesColor(0, 128, 0, 255); + public static SeriesColor RED = new SeriesColor(255, 0, 0, 255); + public static SeriesColor TURQUOISE = new SeriesColor(0, 191, 191, 255); + public static SeriesColor MAGENTA = new SeriesColor(191, 0, 191, 255); + public static SeriesColor YELLOW = new SeriesColor(191, 191, 0, 255); + public static SeriesColor DARK_GREY = new SeriesColor(64, 64, 64, 255); + // Chart Style /////////////////////////////// @Override @@ -49,6 +62,12 @@ public class MatlabTheme implements Theme { return 10; } + @Override + public SeriesColorMarkerLineStyleCycler getSeriesColorMarkerLineStyleCycler() { + + return new MatlabSeriesColorMarkerLineStyleCycler(); + } + // Chart Title /////////////////////////////// @Override @@ -249,13 +268,13 @@ public class MatlabTheme implements Theme { return true; } - + @Override public boolean isPlotGridHorizontalLinesVisible() { return true; } - + @Override public Color getPlotBackgroundColor() { @@ -334,4 +353,43 @@ public class MatlabTheme implements Theme { return false; } + + public class MatlabSeriesColorMarkerLineStyleCycler extends SeriesColorMarkerLineStyleCycler { + + @Override + public List<SeriesColor> getSeriesColorList() { + + // 1. Color + List<SeriesColor> seriesColorMap = new ArrayList<SeriesColor>(); + seriesColorMap.add(BLUE); + seriesColorMap.add(GREEN); + seriesColorMap.add(RED); + seriesColorMap.add(TURQUOISE); + seriesColorMap.add(MAGENTA); + seriesColorMap.add(YELLOW); + seriesColorMap.add(DARK_GREY); + return seriesColorMap; + } + + @Override + public List<SeriesMarker> getSeriesMarkerList() { + + // 2. Marker + List<SeriesMarker> seriesMarkerList = new ArrayList<SeriesMarker>(); + seriesMarkerList.add(SeriesMarker.NONE); + return seriesMarkerList; + } + + @Override + public List<SeriesLineStyle> getLineStyleList() { + + // 3. Stroke + List<SeriesLineStyle> seriesLineStyleList = new ArrayList<SeriesLineStyle>(); + seriesLineStyleList.add(SeriesLineStyle.SOLID); + seriesLineStyleList.add(SeriesLineStyle.DASH_DASH); + seriesLineStyleList.add(SeriesLineStyle.DOT_DOT); + return seriesLineStyleList; + } + + } } diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/SeriesColorMarkerLineStyleCycler.java b/xchart/src/main/java/org/knowm/xchart/internal/style/SeriesColorMarkerLineStyleCycler.java index f73af62a83a857cae352931c027c78715844e439..31399dcb7a329a27aa8f162421d313d6e84e1f40 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/style/SeriesColorMarkerLineStyleCycler.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/style/SeriesColorMarkerLineStyleCycler.java @@ -16,9 +16,7 @@ */ package org.knowm.xchart.internal.style; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Map; +import java.util.List; import org.knowm.xchart.SeriesColor; import org.knowm.xchart.SeriesLineStyle; @@ -28,19 +26,25 @@ import org.knowm.xchart.SeriesMarker; * Cycles through the different colors, markers, and strokes in a predetermined way * <p> * This is an internal class that should not be used be clients - * + * * @author timmolter */ -public class SeriesColorMarkerLineStyleCycler { +public abstract class SeriesColorMarkerLineStyleCycler { + + public abstract List<SeriesColor> getSeriesColorList(); + + public abstract List<SeriesMarker> getSeriesMarkerList(); - /** a map holding the SeriesColors */ - private final Map<Integer, SeriesColor> seriesColorMap = new HashMap<Integer, SeriesColor>(); + public abstract List<SeriesLineStyle> getLineStyleList(); + + /** a List holding the SeriesColors */ + private final List<SeriesColor> seriesColorList; /** a map holding the SeriesMarkers */ - private final Map<Integer, SeriesMarker> seriesMarkerMap = new HashMap<Integer, SeriesMarker>(); + private final List<SeriesMarker> seriesMarkerList; /** a map holding the SeriesLineStyles */ - private final Map<Integer, SeriesLineStyle> seriesLineStyleMap = new HashMap<Integer, SeriesLineStyle>(); + private final List<SeriesLineStyle> seriesLineStyleList; /** an internal counter */ private int colorCounter = 0; @@ -52,51 +56,36 @@ public class SeriesColorMarkerLineStyleCycler { */ public SeriesColorMarkerLineStyleCycler() { - // 1. Color - for (SeriesColor seriesColor : EnumSet.allOf(SeriesColor.class)) { - seriesColorMap.put(seriesColor.getIndex(), seriesColor); - } - - // 2. Marker - for (SeriesMarker seriesMarker : EnumSet.allOf(SeriesMarker.class)) { - if (seriesMarker.getIndex() >= 0) { // skip SeriesMarker.NONE - seriesMarkerMap.put(seriesMarker.getIndex(), seriesMarker); - } - } - - // 3. Stroke - for (SeriesLineStyle seriesLineStyle : EnumSet.allOf(SeriesLineStyle.class)) { - if (seriesLineStyle.getIndex() >= 0) { // skip SeriesLineStyle.NONE - seriesLineStyleMap.put(seriesLineStyle.getIndex(), seriesLineStyle); - } - } + seriesColorList = getSeriesColorList(); + seriesMarkerList = getSeriesMarkerList(); + seriesLineStyleList = getLineStyleList(); } /** * Get the next SeriesColorMarkerLineStyle - * + * * @return the next SeriesColorMarkerLineStyle */ public SeriesColorMarkerLineStyle getNextSeriesColorMarkerLineStyle() { // 1. Color - cycle through colors one by one - if (colorCounter >= seriesColorMap.size()) { + if (colorCounter >= seriesColorList.size()) { colorCounter = 0; strokeCounter++; } - SeriesColor seriesColor = seriesColorMap.get(colorCounter++); + SeriesColor seriesColor = seriesColorList.get(colorCounter++); // 2. Stroke - cycle through strokes one by one but only after a color cycle - if (strokeCounter >= seriesLineStyleMap.size()) { + if (strokeCounter >= seriesLineStyleList.size()) { strokeCounter = 0; } - SeriesLineStyle seriesLineStyle = seriesLineStyleMap.get(strokeCounter); + SeriesLineStyle seriesLineStyle = seriesLineStyleList.get(strokeCounter); // 3. Marker - cycle through markers one by one - if (markerCounter >= seriesMarkerMap.size()) { + if (markerCounter >= seriesMarkerList.size()) { markerCounter = 0; } - SeriesMarker marker = seriesMarkerMap.get(markerCounter++); + SeriesMarker marker = seriesMarkerList.get(markerCounter++); return new SeriesColorMarkerLineStyle(seriesColor.getColor(), marker.getMarker(), seriesLineStyle.getBasicStroke()); } 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 c593bf92c572d4cf3ed58e3888368589188f4d6b..84dfdff38f40fd9df292ed8d9378f1f9e9df1cc0 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 @@ -35,6 +35,8 @@ public interface Theme { public int getChartPadding(); + public SeriesColorMarkerLineStyleCycler getSeriesColorMarkerLineStyleCycler(); + // Chart Title /////////////////////////////// public Font getChartTitleFont(); @@ -104,9 +106,9 @@ public interface Theme { // Chart Plot Area /////////////////////////////// public boolean isPlotGridLinesVisible(); - + public boolean isPlotGridVerticalLinesVisible(); - + public boolean isPlotGridHorizontalLinesVisible(); public Color getPlotBackgroundColor(); 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 fb69b0610c7d0d68927edb152a646bdc353c9a3e..99c117d9509ce32c57d19a5718c13a4e5963358c 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 @@ -20,8 +20,14 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Stroke; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; import org.knowm.xchart.ChartColor; +import org.knowm.xchart.SeriesColor; +import org.knowm.xchart.SeriesLineStyle; +import org.knowm.xchart.SeriesMarker; import org.knowm.xchart.StyleManager.LegendPosition; /** @@ -29,6 +35,42 @@ import org.knowm.xchart.StyleManager.LegendPosition; */ public class XChartTheme implements Theme { + /** BLUE */ + public static SeriesColor BLUE = new SeriesColor(0, 55, 255, 180); + + /** ORANGE */ + public static SeriesColor ORANGE = new SeriesColor(255, 172, 0, 180); + + /** PURPLE */ + public static SeriesColor PURPLE = new SeriesColor(128, 0, 255, 180); + + /** GREEN */ + public static SeriesColor GREEN = new SeriesColor(0, 205, 0, 180); + + /** RED */ + public static SeriesColor RED = new SeriesColor(205, 0, 0, 180); + + /** YELLOW */ + public static SeriesColor YELLOW = new SeriesColor(255, 215, 0, 180); + + /** MAGENTA */ + public static SeriesColor MAGENTA = new SeriesColor(255, 0, 255, 180); + + /** PINK */ + public static SeriesColor PINK = new SeriesColor(255, 166, 201, 180); + + /** LIGHT_GREY */ + public static SeriesColor LIGHT_GREY = new SeriesColor(207, 207, 207, 180); + + /** CYAN */ + public static SeriesColor CYAN = new SeriesColor(0, 255, 255, 180); + + /** BROWN */ + public static SeriesColor BROWN = new SeriesColor(102, 56, 10, 180); + + /** BLACK */ + public static SeriesColor BLACK = new SeriesColor(0, 0, 0, 180); + // Chart Style /////////////////////////////// @Override @@ -49,6 +91,12 @@ public class XChartTheme implements Theme { return 10; } + @Override + public SeriesColorMarkerLineStyleCycler getSeriesColorMarkerLineStyleCycler() { + + return new XChartSeriesColorMarkerLineStyleCycler(); + } + // Chart Title /////////////////////////////// @Override @@ -249,13 +297,13 @@ public class XChartTheme implements Theme { return true; } - + @Override public boolean isPlotGridHorizontalLinesVisible() { return true; } - + @Override public Color getPlotBackgroundColor() { @@ -334,4 +382,55 @@ public class XChartTheme implements Theme { return false; } + public class XChartSeriesColorMarkerLineStyleCycler extends SeriesColorMarkerLineStyleCycler { + + @Override + public List<SeriesColor> getSeriesColorList() { + + // 1. Color + List<SeriesColor> seriesColorMap = new ArrayList<SeriesColor>(); + seriesColorMap.add(BLUE); + seriesColorMap.add(ORANGE); + seriesColorMap.add(PURPLE); + seriesColorMap.add(GREEN); + seriesColorMap.add(RED); + seriesColorMap.add(YELLOW); + seriesColorMap.add(MAGENTA); + seriesColorMap.add(PINK); + seriesColorMap.add(LIGHT_GREY); + seriesColorMap.add(CYAN); + seriesColorMap.add(BROWN); + seriesColorMap.add(BLACK); + + return seriesColorMap; + } + + @Override + public List<SeriesMarker> getSeriesMarkerList() { + + // 2. Marker + List<SeriesMarker> seriesMarkerList = new ArrayList<SeriesMarker>(); + for (SeriesMarker seriesMarker : EnumSet.allOf(SeriesMarker.class)) { + if (seriesMarker.getIndex() >= 0) { // skip SeriesMarker.NONE + seriesMarkerList.add(seriesMarker); + } + } + return seriesMarkerList; + } + + @Override + public List<SeriesLineStyle> getLineStyleList() { + + // 3. Stroke + List<SeriesLineStyle> seriesLineStyleList = new ArrayList<SeriesLineStyle>(); + for (SeriesLineStyle seriesLineStyle : EnumSet.allOf(SeriesLineStyle.class)) { + if (seriesLineStyle.getIndex() >= 0) { // skip SeriesLineStyle.NONE + seriesLineStyleList.add(seriesLineStyle); + } + } + return seriesLineStyleList; + } + + } + }