From 75abc405fbfddee931facd317fd5c4368de66245 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Sun, 10 Feb 2013 16:05:28 +0100 Subject: [PATCH] added line and scatter chart differentiation --- .../com/xeiam/xchart/demo/XChartDemo.java | 56 +++++++++------- .../demo/charts/{ => line}/ExampleChart.java | 2 +- .../{Example1.java => line/LineChart01.java} | 19 ++++-- .../{Example2.java => line/LineChart02.java} | 14 ++-- .../{Example3.java => line/LineChart03.java} | 9 +-- .../{Example4.java => line/LineChart04.java} | 9 +-- .../{Example5.java => line/LineChart05.java} | 9 +-- .../{Example6.java => line/LineChart06.java} | 9 +-- .../{Example7.java => line/LineChart07.java} | 9 +-- .../{Example8.java => line/LineChart08.java} | 9 +-- .../{Example9.java => line/LineChart09.java} | 9 +-- .../{Example10.java => line/LineChart10.java} | 9 +-- .../{Example11.java => line/LineChart11.java} | 8 +-- .../demo/charts/scatter/ScatterChart01.java | 67 +++++++++++++++++++ .../com/xeiam/xchart/example/Example1.java | 3 +- .../src/main/java/com/xeiam/xchart/Chart.java | 4 +- .../java/com/xeiam/xchart/ChartBuilder.java | 31 +++++++-- .../main/java/com/xeiam/xchart/LineChart.java | 52 ++++++++++++++ .../java/com/xeiam/xchart/QuickChart.java | 4 +- .../java/com/xeiam/xchart/ScatterChart.java | 52 ++++++++++++++ .../xchart/internal/chartpart/AxisPair.java | 2 +- .../internal/chartpart/PlotContent.java | 5 +- .../java/com/xeiam/xchart/style/Series.java | 1 - .../SeriesColorMarkerLineStyle.java | 2 +- .../SeriesColorMarkerLineStyleCycler.java | 5 +- 25 files changed, 310 insertions(+), 89 deletions(-) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{ => line}/ExampleChart.java (96%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example1.java => line/LineChart01.java} (93%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example2.java => line/LineChart02.java} (85%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example3.java => line/LineChart03.java} (87%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example4.java => line/LineChart04.java} (89%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example5.java => line/LineChart05.java} (84%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example6.java => line/LineChart06.java} (83%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example7.java => line/LineChart07.java} (86%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example8.java => line/LineChart08.java} (89%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example9.java => line/LineChart09.java} (93%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example10.java => line/LineChart10.java} (88%) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{Example11.java => line/LineChart11.java} (84%) create mode 100644 xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java create mode 100644 xchart/src/main/java/com/xeiam/xchart/LineChart.java create mode 100644 xchart/src/main/java/com/xeiam/xchart/ScatterChart.java rename xchart/src/main/java/com/xeiam/xchart/{internal/misc => style}/SeriesColorMarkerLineStyle.java (97%) rename xchart/src/main/java/com/xeiam/xchart/{internal/misc => style}/SeriesColorMarkerLineStyleCycler.java (95%) diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java index 5bae95c0..a7f702cf 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java @@ -29,17 +29,18 @@ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; import com.xeiam.xchart.XChartPanel; -import com.xeiam.xchart.demo.charts.Example1; -import com.xeiam.xchart.demo.charts.Example10; -import com.xeiam.xchart.demo.charts.Example11; -import com.xeiam.xchart.demo.charts.Example2; -import com.xeiam.xchart.demo.charts.Example3; -import com.xeiam.xchart.demo.charts.Example4; -import com.xeiam.xchart.demo.charts.Example5; -import com.xeiam.xchart.demo.charts.Example6; -import com.xeiam.xchart.demo.charts.Example7; -import com.xeiam.xchart.demo.charts.Example8; -import com.xeiam.xchart.demo.charts.Example9; +import com.xeiam.xchart.demo.charts.line.LineChart01; +import com.xeiam.xchart.demo.charts.line.LineChart02; +import com.xeiam.xchart.demo.charts.line.LineChart03; +import com.xeiam.xchart.demo.charts.line.LineChart04; +import com.xeiam.xchart.demo.charts.line.LineChart05; +import com.xeiam.xchart.demo.charts.line.LineChart06; +import com.xeiam.xchart.demo.charts.line.LineChart07; +import com.xeiam.xchart.demo.charts.line.LineChart08; +import com.xeiam.xchart.demo.charts.line.LineChart09; +import com.xeiam.xchart.demo.charts.line.LineChart10; +import com.xeiam.xchart.demo.charts.line.LineChart11; +import com.xeiam.xchart.demo.charts.scatter.ScatterChart01; /** * Class containing all XChart example charts @@ -79,7 +80,7 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { JScrollPane treeView = new JScrollPane(tree); // Create Chart Panel - chartPanel = new XChartPanel(new Example1().getChart()); + chartPanel = new XChartPanel(new LineChart01().getChart()); // Add the scroll panes to a split pane. splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); @@ -129,41 +130,44 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { category = new DefaultMutableTreeNode("Line Charts"); top.add(category); - chart = new DefaultMutableTreeNode(new ChartInfo("Example1 - Manual Data", new Example1().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart01 - Manual Data", new LineChart01().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example2 - Customized series style", new Example2().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart02 - Customized series style", new LineChart02().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example3 - Multiple curves on one Chart", new Example3().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart03 - Multiple curves on one Chart", new LineChart03().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example4 - Date Axis", new Example4().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart04 - Date Axis", new LineChart04().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example5 - Vertical and horizontal lines", new Example5().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart05 - Vertical and horizontal lines", new LineChart05().getChart())); category.add(chart); - // Second category - category = new DefaultMutableTreeNode("More Charts"); - top.add(category); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart06 - Single point", new LineChart06().getChart())); + category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example6 - Single point", new Example6().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart07 - Longs as X-Axis data", new LineChart07().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example7 - Longs as X-Axis data", new Example7().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart08 - Error bars", new LineChart08().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example8 - Error bars", new Example8().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart09 - Extensive chart customization", new LineChart09().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example9 - Extensive chart customization", new Example9().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart10 - Plots Hundreds of Series on One Plot", new LineChart10().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example10 - Plots Hundreds of Series on One Plot", new Example10().getChart())); + chart = new DefaultMutableTreeNode(new ChartInfo("LineChart11 - Using ChartBuilder to Make a Chart", new LineChart11().getChart())); category.add(chart); - chart = new DefaultMutableTreeNode(new ChartInfo("Example11 - Using ChartBuilder to Make a Chart", new Example11().getChart())); + // Second category + category = new DefaultMutableTreeNode("Scatter Charts"); + top.add(category); + + chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart01 - Gaussian Blob Scatter Plot", new ScatterChart01().getChart())); category.add(chart); } diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java similarity index 96% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java index 60c9cf86..51815b69 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java @@ -19,7 +19,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example1.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java similarity index 93% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example1.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java index 19e3cea8..905e7bf5 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example1.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java @@ -13,26 +13,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.util.Arrays; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesMarker; /** - * Manual Data + * Hardcoded Data + * <p> + * Demonstrates the following: + * <ul> + * <li>Series data hardcoded, perhaps copied from elsewhere</li> + * <li>LineChart without series markers</li> + * </ul> * * @author timmolter */ -public class Example1 implements ExampleChart { +public class LineChart01 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example1(); + ExampleChart exampleChart = new LineChart01(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -53,6 +60,7 @@ public class Example1 implements ExampleChart { -0.491143625364344, -0.4842915805643152, -0.47552825814757643, -0.4648882429441252, -0.4524135262330092, -0.438153340021931, -0.42216396275100676, -0.4045084971874727, -0.3852566213878937, -0.36448431371070455, -0.3422735529643432, -0.31871199487434343, -0.29389262614623524, -0.26791339748949666, -0.2408768370508561, -0.2128896457825349, -0.18406227634233727, -0.15450849718747214, -0.12434494358242552, -0.0936906572928606, -0.06266661678215013, -0.03139525976465486, 2.097981369335578E-15 }; + Collection<Number> xData = Arrays.asList(xDataArray); Number[] yDataArray = new Number[] { 0.0, 1.5702142318133935E-5, 3.13688735543879E-5, 4.703341403158832E-5, 6.303295245179154E-5, 8.092859563778825E-5, 1.0594882618710001E-4, @@ -68,10 +76,11 @@ public class Example1 implements ExampleChart { -2.4744573769866404E-4, -2.4122358912925663E-4, -2.3473774775902484E-4, -2.2772135357722773E-4, -2.2006305955750752E-4, -2.1171197663128998E-4, -2.026763153011749E-4, -1.928814887412768E-4, -1.8242620113215842E-4, -1.712818057089484E-4, -1.5947175495155755E-4, -1.470534737044005E-4, -1.340464949116753E-4, -1.2051929111759324E-4, -1.0651565202537847E-4, -9.209212285608304E-5, -7.730521584738858E-5, -6.221344753211741E-5, -4.687672566856378E-5, -3.135450711247751E-5, -1.5708413280955366E-5, 1.0498035802487025E-18 }; + Collection<Number> yData = Arrays.asList(yDataArray); // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.setChartTitle("Example1"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example2.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java similarity index 85% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example2.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java index 7eae57a5..c84f1b9a 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example2.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.util.ArrayList; import java.util.List; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesColor; @@ -27,14 +28,19 @@ import com.xeiam.xchart.style.SeriesMarker; /** * Sine wave with customized series style + * <p> + * * Demonstrates the following: + * <ul> + * <li>Customizing the series style properties</li> + * </ul> * * @author timmolter */ -public class Example2 implements ExampleChart { +public class LineChart02 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example2(); + ExampleChart exampleChart = new LineChart02(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -53,7 +59,7 @@ public class Example2 implements ExampleChart { } // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.getStyleManager().setChartTitleVisible(false); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example3.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java similarity index 87% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example3.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java index 9b4659d3..a76c69df 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example3.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.util.ArrayList; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; /** @@ -26,11 +27,11 @@ import com.xeiam.xchart.SwingWrapper; * * @author timmolter */ -public class Example3 implements ExampleChart { +public class LineChart03 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example3(); + ExampleChart exampleChart = new LineChart03(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -39,7 +40,7 @@ public class Example3 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); for (int i = 1; i <= 14; i++) { diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example4.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java similarity index 89% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example4.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java index b73bb55a..efc9b7b3 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example4.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.text.DateFormat; import java.text.ParseException; @@ -24,6 +24,7 @@ import java.util.Date; import java.util.TimeZone; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.Series; @@ -32,11 +33,11 @@ import com.xeiam.xchart.style.Series; * * @author timmolter */ -public class Example4 implements ExampleChart { +public class LineChart04 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example4(); + ExampleChart exampleChart = new LineChart04(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -45,7 +46,7 @@ public class Example4 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // generates linear data Collection<Date> xData = new ArrayList<Date>(); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example5.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java similarity index 84% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example5.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java index 7f8e9584..ff22f9c4 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example5.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; /** @@ -23,11 +24,11 @@ import com.xeiam.xchart.SwingWrapper; * * @author timmolter */ -public class Example5 implements ExampleChart { +public class LineChart05 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example5(); + ExampleChart exampleChart = new LineChart05(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -36,7 +37,7 @@ public class Example5 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.setChartTitle("Example5"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example6.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java similarity index 83% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example6.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java index ef8b9e73..ab0f61dd 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example6.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; /** @@ -23,11 +24,11 @@ import com.xeiam.xchart.SwingWrapper; * * @author timmolter */ -public class Example6 implements ExampleChart { +public class LineChart06 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example6(); + ExampleChart exampleChart = new LineChart06(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -36,7 +37,7 @@ public class Example6 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.setChartTitle("Example6"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example7.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java similarity index 86% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example7.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java index 0b006b1d..2506a99d 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example7.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.util.Arrays; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; /** @@ -26,11 +27,11 @@ import com.xeiam.xchart.SwingWrapper; * * @author timmolter */ -public class Example7 implements ExampleChart { +public class LineChart07 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example7(); + ExampleChart exampleChart = new LineChart07(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -42,7 +43,7 @@ public class Example7 implements ExampleChart { Collection<Number> yData = Arrays.asList(new Number[] { 0.0, 1.0, 2.0, 0.0, 1.0, 2.0, 0.0, 1.0, 2.0, 0.0 }); // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); chart.setChartTitle("Example7"); chart.setXAxisTitle("X"); chart.setYAxisTitle("Y"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example8.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java similarity index 89% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example8.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java index ce2a4429..d7926a1d 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example8.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.util.ArrayList; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesColor; @@ -30,11 +31,11 @@ import com.xeiam.xchart.style.SeriesMarker; * * @author timmolter */ -public class Example8 implements ExampleChart { +public class LineChart08 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example8(); + ExampleChart exampleChart = new LineChart08(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -54,7 +55,7 @@ public class Example8 implements ExampleChart { } // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.getStyleManager().setChartTitleVisible(false); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example9.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java similarity index 93% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example9.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java index 9d669ed8..7be60a66 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example9.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import java.awt.Color; import java.awt.Font; @@ -26,6 +26,7 @@ import java.util.Date; import java.util.Locale; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.ChartColor; import com.xeiam.xchart.style.Series; @@ -38,11 +39,11 @@ import com.xeiam.xchart.style.SeriesMarker; * * @author timmolter */ -public class Example9 implements ExampleChart { +public class LineChart09 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example9(); + ExampleChart exampleChart = new LineChart09(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -51,7 +52,7 @@ public class Example9 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // generates linear data Collection<Date> xData = new ArrayList<Date>(); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java similarity index 88% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java index 422ca389..4dfd9c35 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; import com.xeiam.xchart.SwingWrapper; import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesColor; @@ -27,11 +28,11 @@ import com.xeiam.xchart.style.SeriesMarker; * * @author timmolter */ -public class Example10 implements ExampleChart { +public class LineChart10 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example10(); + ExampleChart exampleChart = new LineChart10(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -40,7 +41,7 @@ public class Example10 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new Chart(800, 600); + Chart chart = new LineChart(800, 600); // Customize Chart chart.setChartTitle("Example10"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example11.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java similarity index 84% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example11.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java index 109ee4b4..690ce8f3 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example11.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.demo.charts; +package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; @@ -24,11 +24,11 @@ import com.xeiam.xchart.SwingWrapper; * * @author timmolter */ -public class Example11 implements ExampleChart { +public class LineChart11 implements ExampleChart { public static void main(String[] args) { - ExampleChart exampleChart = new Example11(); + ExampleChart exampleChart = new LineChart11(); Chart chart = exampleChart.getChart(); new SwingWrapper(chart).displayChart(); } @@ -37,7 +37,7 @@ public class Example11 implements ExampleChart { public Chart getChart() { // Create Chart - Chart chart = new ChartBuilder().width(800).height(600).title("My Title").xAxisTitle("X").yAxisTitle("Y").showLegend(false).build(); + Chart chart = new ChartBuilder().width(800).height(600).title("My Title").xAxisTitle("X").yAxisTitle("Y").build(); chart.addSeries("x", new double[] { 1, 2, 5, 7 }, new double[] { -3, 6, 9, 0 }); return chart; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java new file mode 100644 index 00000000..86afcc66 --- /dev/null +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java @@ -0,0 +1,67 @@ +/** + * Copyright 2011-2013 Xeiam LLC. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.xeiam.xchart.demo.charts.scatter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.xeiam.xchart.Chart; +import com.xeiam.xchart.ScatterChart; +import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.line.ExampleChart; + +/** + * Gaussian Blob Scatter Plot + * + * @author timmolter + */ +public class ScatterChart01 implements ExampleChart { + + public static void main(String[] args) { + + ExampleChart exampleChart = new ScatterChart01(); + Chart chart = exampleChart.getChart(); + new SwingWrapper(chart).displayChart(); + } + + @Override + public Chart getChart() { + + // generates sine data + List<Number> xData = new ArrayList<Number>(); + List<Number> yData = new ArrayList<Number>(); + Random random = new Random(); + int size = 1000; + for (int i = 0; i < size; i++) { + xData.add(random.nextGaussian()); + yData.add(random.nextGaussian()); + } + + // Create Chart + Chart chart = new ScatterChart(800, 600); + + // Customize Chart + chart.getStyleManager().setChartTitleVisible(false); + chart.getStyleManager().setLegendVisible(false); + + // Series + chart.addSeries("Gaussian Blob", xData, yData); + + return chart; + } + +} diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/example/Example1.java b/xchart-demo/src/main/java/com/xeiam/xchart/example/Example1.java index 86154f30..e47de08f 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/example/Example1.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/example/Example1.java @@ -17,6 +17,7 @@ package com.xeiam.xchart.example; import com.xeiam.xchart.BitmapEncoder; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.LineChart; /** * Creates a simple Chart and saves it as a PNG and JPEG image file. @@ -30,7 +31,7 @@ public class Example1 { double[] yData = new double[] { 2.0, 1.0, 0.0 }; // Create Chart - Chart chart = new Chart(500, 400); + Chart chart = new LineChart(500, 400); chart.setChartTitle("Sample Chart"); chart.setXAxisTitle("X"); chart.setYAxisTitle("Y"); diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java index ef91f015..bfd2652d 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Chart.java +++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java @@ -35,7 +35,7 @@ import com.xeiam.xchart.style.theme.Theme; * * @author timmolter */ -public class Chart { +public abstract class Chart { public int width; public int height; @@ -73,7 +73,7 @@ public class Chart { setChartTitle(chartBuilder.title); setXAxisTitle(chartBuilder.xAxisTitle); setYAxisTitle(chartBuilder.yAxisTitle); - styleManager.setLegendVisible(chartBuilder.isLegendVisible); + setTheme(chartBuilder.theme); } /** diff --git a/xchart/src/main/java/com/xeiam/xchart/ChartBuilder.java b/xchart/src/main/java/com/xeiam/xchart/ChartBuilder.java index c582ce9c..489fc674 100644 --- a/xchart/src/main/java/com/xeiam/xchart/ChartBuilder.java +++ b/xchart/src/main/java/com/xeiam/xchart/ChartBuilder.java @@ -21,17 +21,32 @@ */ package com.xeiam.xchart; +import com.xeiam.xchart.style.theme.Theme; +import com.xeiam.xchart.style.theme.XChartTheme; + /** * @author timmolter */ public class ChartBuilder { + public enum ChartType { + + Line, Scatter + } + + protected ChartType chartType = ChartType.Line; protected int width = 800; protected int height = 600; protected String title = ""; protected String xAxisTitle = ""; protected String yAxisTitle = ""; - protected boolean isLegendVisible = true; + protected Theme theme = new XChartTheme(); + + public ChartBuilder chartType(ChartType chartType) { + + this.chartType = chartType; + return this; + } public ChartBuilder width(int width) { @@ -63,9 +78,9 @@ public class ChartBuilder { return this; } - public ChartBuilder showLegend(boolean isLegendVisible) { + public ChartBuilder theme(Theme theme) { - this.isLegendVisible = isLegendVisible; + this.theme = theme; return this; } @@ -76,7 +91,15 @@ public class ChartBuilder { */ public Chart build() { - return new Chart(this); + switch (chartType) { + case Line: + return new LineChart(this); + case Scatter: + return new ScatterChart(this); + default: + return new LineChart(this); + } + } } diff --git a/xchart/src/main/java/com/xeiam/xchart/LineChart.java b/xchart/src/main/java/com/xeiam/xchart/LineChart.java new file mode 100644 index 00000000..e79df9bf --- /dev/null +++ b/xchart/src/main/java/com/xeiam/xchart/LineChart.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2013 Xeiam LLC http://xeiam.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.xeiam.xchart; + +/** + * A Scatter Chart is a contains series with no lines drawn between the points + * + * @author timmolter + */ +public class LineChart extends Chart { + + /** + * Constructor + * + * @param width + * @param height + */ + public LineChart(int width, int height) { + + super(width, height); + + } + + /** + * Constructor + * + * @param chartBuilder + */ + public LineChart(ChartBuilder chartBuilder) { + + super(chartBuilder); + } +} diff --git a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java index 2d4249b0..a242e338 100644 --- a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java +++ b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java @@ -72,7 +72,7 @@ public final class QuickChart { public static Chart getChart(String chartTitle, String xTitle, String yTitle, String[] seriesNames, double[] xData, double[][] yData) { // Create Chart - Chart chart = new Chart(WIDTH, HEIGHT); + Chart chart = new LineChart(WIDTH, HEIGHT); // Customize Chart chart.setChartTitle(chartTitle); @@ -108,7 +108,7 @@ public final class QuickChart { public static Chart getChart(String chartTitle, String xTitle, String yTitle, String seriesName, Collection<Number> xData, Collection<Number> yData) { // Create Chart - Chart chart = new Chart(WIDTH, HEIGHT); + Chart chart = new LineChart(WIDTH, HEIGHT); // Customize Chart chart.setChartTitle(chartTitle); diff --git a/xchart/src/main/java/com/xeiam/xchart/ScatterChart.java b/xchart/src/main/java/com/xeiam/xchart/ScatterChart.java new file mode 100644 index 00000000..fe1fe13b --- /dev/null +++ b/xchart/src/main/java/com/xeiam/xchart/ScatterChart.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2013 Xeiam LLC http://xeiam.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.xeiam.xchart; + +/** + * A Scatter Chart is a contains series with no lines drawn between the points + * + * @author timmolter + */ +public class ScatterChart extends Chart { + + /** + * Constructor + * + * @param width + * @param height + */ + public ScatterChart(int width, int height) { + + super(width, height); + + } + + /** + * Constructor + * + * @param chartBuilder + */ + public ScatterChart(ChartBuilder chartBuilder) { + + super(chartBuilder); + } +} diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java index 3fa995c6..b01b0322 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java @@ -26,8 +26,8 @@ import java.util.Map; import com.xeiam.xchart.Chart; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; -import com.xeiam.xchart.internal.misc.SeriesColorMarkerLineStyleCycler; import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.style.SeriesColorMarkerLineStyleCycler; /** * @author timmolter diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java index aab9241b..c9951921 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java @@ -26,6 +26,7 @@ import java.util.Iterator; import java.util.Map; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.ScatterChart; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.style.Series; @@ -58,6 +59,8 @@ public class PlotContent implements ChartPart { @Override public void paint(Graphics2D g) { + boolean isScatterChart = getChart() instanceof ScatterChart; + Rectangle bounds = plot.getBounds(); Map<Integer, Series> seriesMap = getChart().getAxisPair().getSeriesMap(); @@ -130,7 +133,7 @@ public class PlotContent implements ChartPart { // System.out.println(yTransform); // paint line - if (series.stroke != null) { + if (series.stroke != null && !isScatterChart) { if (previousX != Integer.MIN_VALUE && previousY != Integer.MIN_VALUE) { g.setColor(series.strokeColor); g.setStroke(series.stroke); diff --git a/xchart/src/main/java/com/xeiam/xchart/style/Series.java b/xchart/src/main/java/com/xeiam/xchart/style/Series.java index a9da1851..030f099a 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/Series.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/Series.java @@ -24,7 +24,6 @@ import java.util.Iterator; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.markers.Marker; -import com.xeiam.xchart.internal.misc.SeriesColorMarkerLineStyle; /** * A Series containing X and Y data to be plotted on a Chart diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyle.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyle.java similarity index 97% rename from xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyle.java rename to xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyle.java index d9e19b70..1e4806e8 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyle.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyle.java @@ -19,7 +19,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.xeiam.xchart.internal.misc; +package com.xeiam.xchart.style; import java.awt.BasicStroke; import java.awt.Color; diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java similarity index 95% rename from xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java rename to xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java index 92d7cf05..974cde0c 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesColorMarkerLineStyleCycler.java @@ -19,15 +19,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.xeiam.xchart.internal.misc; +package com.xeiam.xchart.style; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; -import com.xeiam.xchart.style.SeriesColor; -import com.xeiam.xchart.style.SeriesLineStyle; -import com.xeiam.xchart.style.SeriesMarker; /** * Cycles through the different colors, markers, and strokes in a predetermined way -- GitLab