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 ce69b6b9e4a4f9c4b23bac17c3fd9d4c5c5911d9..45c335b6831701f0cd728bf4b5b03b9172a38c96 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 @@ -48,6 +48,7 @@ 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; +import com.xeiam.xchart.demo.charts.scatter.ScatterChart02; /** * Class containing all XChart example charts @@ -173,6 +174,8 @@ public class XChartDemo extends JPanel implements TreeSelectionListener { chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart01 - Gaussian Blob", new ScatterChart01().getChart())); category.add(chart); + chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart02 - Logarithmic Data", new ScatterChart02().getChart())); + category.add(chart); // Area category category = new DefaultMutableTreeNode("Area Charts"); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java similarity index 96% rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java index cfe44b64d3c39d146d1924813ecb953b57a0f632..7e26d815c30c013154d185c1c48e129b36f9dac1 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java @@ -19,12 +19,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.xeiam.xchart.demo.charts.line; +package com.xeiam.xchart.demo.charts; import com.xeiam.xchart.Chart; -/** - */ public interface ExampleChart { public Chart getChart(); diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java index 7e36c715eb816c871aa39e8819b93abf3c8f5eb4..2176779ea6a888a654b2fb40bb618f9279dd7aa9 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java @@ -18,7 +18,7 @@ package com.xeiam.xchart.demo.charts.area; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.StyleManager.ChartType; import com.xeiam.xchart.style.StyleManager.LegendPosition; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java index 1b23ded02cf16108eb8adba6614eafa37a0fe839..24b32ea72ceeb27296fdabf91235352c37ce1cce 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java @@ -24,7 +24,7 @@ package com.xeiam.xchart.demo.charts.bar; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.StyleManager.ChartType; import com.xeiam.xchart.style.StyleManager.LegendPosition; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java index d0194a968fb80a6f6a5372a748e1fd501e10133b..d100041dc9859e805478babb68962f208596354d 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Millisecond scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java index fd2db2f19d1cfc7b07ecb0cbada50b9aa4de8e7d..00d1e95620094a5c6da2af706bd110a274388145 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Second scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java index 157d8215756dacdb7ab78ba421be69c540e4340c..b13aaacc8da1671fbcbf835b0d6270f0114ea040 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Minute scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java index cf0ae7701bbad1b416fc92fb36280e9042156497..bb3e9901a49271836af0746802ebfd674d92e0ef 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Hour scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java index b71be652c0d5cfc8b93b122d7ef5fb8e924d80e2..7277b3b8447256f7119d4208af02e383788aaac3 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Day scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java index 09d66139a9ddd84b915d859de284a75b5a60a8bf..c574840c46a8e9febe8a200f7350e79908f71203 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Month scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java index 0a7b999b2efd9219d01ab066fc5b19a097c87a0b..305fd2f0f3b8d6b5dc69a7697cd4317eb7a3b338 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java @@ -24,9 +24,9 @@ import java.util.Date; import java.util.Random; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Year scale diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java index 2291ad4a0fba5332a487ef776dd9b8794591a678..2c40b189987e4f112096ee33e1f51a48b7e404e2 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java @@ -19,8 +19,9 @@ import java.util.Arrays; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.SeriesMarker; /** diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java index e1b558d8317589075dd0283424e1d7853b4b4932..19c78112588c0ed61e90c8346f326f7a0aecd074 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java @@ -19,8 +19,9 @@ import java.util.ArrayList; import java.util.List; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.SeriesColor; import com.xeiam.xchart.style.SeriesLineStyle; import com.xeiam.xchart.style.SeriesMarker; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java index 3404c6e8accdbabadb749288b47d99ae68bb2a9e..d2e7afbb1af9c36ba54ee980b47da82c6de01149 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java @@ -20,6 +20,7 @@ import java.util.Collection; import com.xeiam.xchart.Chart; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Multiple curves on one Chart diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java index ca77de2eee0816203fd1b8e22b9385099777fd19..b8abf2220014144cfa05b035655159479dcc8055 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java @@ -18,6 +18,7 @@ package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.theme.GGPlot2Theme; /** diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java index de073739fb25d4bbfcd663adfd2570c1be709ead..a49c0b171065ceec3e3314c51d34cd9975762793 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java @@ -17,6 +17,7 @@ package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Single point diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java index 1e54855ecf6e4aca3612be2e7fc87255d1d3aa82..e1c397588253a50fb72498320d155ed103fa4b76 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java @@ -20,6 +20,7 @@ import java.util.Collection; import com.xeiam.xchart.Chart; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Longs as X-Axis data diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java index 1d025112ec12e40ec59a7df5848e222cf3ed3d13..0191eee1d2012406d49d72a4f0d02dc3c5f5839c 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java @@ -19,8 +19,9 @@ import java.util.ArrayList; import java.util.Collection; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.SeriesColor; import com.xeiam.xchart.style.SeriesLineStyle; import com.xeiam.xchart.style.SeriesMarker; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java index c91f5353435b41f77f96c5285b9aecc65df72b12..701ee74e84118f9168c22b1df826665b4c9f3ea7 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java @@ -26,9 +26,10 @@ import java.util.Date; import java.util.Locale; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.ChartColor; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesColor; import com.xeiam.xchart.style.SeriesLineStyle; import com.xeiam.xchart.style.SeriesMarker; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java index 2b56b2d3bb005c7b08f007d548ba884e8b3ec169..479af8b06b6f3e24f562c98e0ed944f247a52f81 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java @@ -16,8 +16,9 @@ package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.SeriesColor; import com.xeiam.xchart.style.SeriesLineStyle; import com.xeiam.xchart.style.SeriesMarker; diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java index e42a0195f479e848d07a05f6d2b37f8c4f00fb47..f2b3ba564d831ede9bce125855d265f75ea15cf0 100644 --- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java @@ -18,6 +18,7 @@ package com.xeiam.xchart.demo.charts.line; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; import com.xeiam.xchart.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; /** * Using ChartBuilder to Make a 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 index 9b8dadf18e13e1257bc45a7e7cfa288ca6fd31e6..3883fe6aaee9c2b8d88c10d46b3b4db2aed0429c 100644 --- 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 @@ -21,7 +21,7 @@ import java.util.Random; import com.xeiam.xchart.Chart; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.demo.charts.line.ExampleChart; +import com.xeiam.xchart.demo.charts.ExampleChart; import com.xeiam.xchart.style.StyleManager.ChartType; /** diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java new file mode 100644 index 0000000000000000000000000000000000000000..1dd235069b7f90f9d7d7e588f40f89a8fe5a0885 --- /dev/null +++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java @@ -0,0 +1,76 @@ +/** + * 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.SwingWrapper; +import com.xeiam.xchart.demo.charts.ExampleChart; +import com.xeiam.xchart.style.StyleManager.ChartType; +import com.xeiam.xchart.style.StyleManager.LegendPosition; + +/** + * Logarithmic Data + * <p> + * Demonstrates the following: + * <ul> + * <li>Scatter chart + * <li>Logarithmic X-Axis + * <li>Place legend at Inside-NW position + * + * @author timmolter + */ +public class ScatterChart02 implements ExampleChart { + + public static void main(String[] args) { + + ExampleChart exampleChart = new ScatterChart02(); + Chart chart = exampleChart.getChart(); + new SwingWrapper(chart).displayChart(); + } + + @Override + public Chart getChart() { + + List<Number> xData = new ArrayList<Number>(); + List<Number> yData = new ArrayList<Number>(); + Random random = new Random(); + int size = 400; + for (int i = 0; i < size; i++) { + double nextRandom = random.nextDouble(); + xData.add(Math.pow(10, nextRandom * 10)); + yData.add(nextRandom + random.nextDouble()); + } + + // Create Chart + Chart chart = new Chart(800, 600); + chart.setChartTitle("Logarithmic Data"); + chart.getStyleManager().setChartType(ChartType.Scatter); + chart.getStyleManager().setXAxisLogarithmic(true); + + // Customize Chart + chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW); + + // Series + chart.addSeries("logarithmic data", xData, yData); + + return chart; + } + +} diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java index 17e51c2934f518b4fa89cb38a6a4ecf7d244eab1..ac5fa6df43b5118322d319c9ddafd919c86d0795 100644 --- a/xchart/src/main/java/com/xeiam/xchart/Chart.java +++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java @@ -25,7 +25,6 @@ import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.internal.chartpart.ChartTitle; import com.xeiam.xchart.internal.chartpart.Legend; import com.xeiam.xchart.internal.chartpart.Plot; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.StyleManager; import com.xeiam.xchart.style.theme.Theme; diff --git a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java index 2d4249b0b29576b3fbef74b03351ae40b56b0013..7450bc0c4bc1b259530cffee561a52c7086bbdf3 100644 --- a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java +++ b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java @@ -17,7 +17,6 @@ package com.xeiam.xchart; import java.util.Collection; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesMarker; /** diff --git a/xchart/src/main/java/com/xeiam/xchart/style/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java similarity index 96% rename from xchart/src/main/java/com/xeiam/xchart/style/Series.java rename to xchart/src/main/java/com/xeiam/xchart/Series.java index e701cd7d8d087f8917d0ca6a465a74adaf9fc3ba..638ee8ad194158b7599644047adcb7f35c9fd727 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/Series.java +++ b/xchart/src/main/java/com/xeiam/xchart/Series.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.xeiam.xchart.style; +package com.xeiam.xchart; import java.awt.BasicStroke; import java.awt.Color; @@ -24,6 +24,10 @@ import java.util.Iterator; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.markers.Marker; +import com.xeiam.xchart.style.SeriesColor; +import com.xeiam.xchart.style.SeriesColorMarkerLineStyle; +import com.xeiam.xchart.style.SeriesLineStyle; +import com.xeiam.xchart.style.SeriesMarker; /** * A Series containing X and Y data to be plotted on a Chart 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 668b6559542d05955f1c228bc733df1df472bace..7d7e08f2cc1543e16794177c298071897575d704 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 @@ -25,8 +25,8 @@ import java.util.LinkedHashMap; import java.util.Map; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesColorMarkerLineStyleCycler; /** diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java index 3274a34292bbb4f7d86198a511c9110116c7c1dc..c0a96ea141ff911731c58d210abe782ec5740b8e 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java @@ -23,6 +23,7 @@ import com.xeiam.xchart.Chart; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.axistickcalculator.AxisTickCalculator; import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.LogarithmicAxisTickCalculator; import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator; /** @@ -81,7 +82,15 @@ public class AxisTick implements ChartPart { // System.out.println("workingspace= " + workingSpace); } - if (axis.getAxisType() == AxisType.Number) { + if (axis.getDirection() == Axis.Direction.X && getChart().getStyleManager().isXAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { + + gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); + + } else if (axis.getDirection() == Axis.Direction.Y && getChart().getStyleManager().isYAxisLogarithmic() && axis.getAxisType() != AxisType.Date) { + + gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); + + } else if (axis.getAxisType() == AxisType.Number) { gridStep = new NumberAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager()); diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java index 2cbabd21c5129574478ddd9cd9fe51a2e1d1e045..c40585e819a95031f701c22843a556de42a60c09 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java @@ -95,12 +95,14 @@ public class AxisTickLabels implements ChartPart { int tickLocation = axisTick.getTickLocations().get(i); FontRenderContext frc = g.getFontRenderContext(); - TextLayout layout = new TextLayout(tickLabel, getChart().getStyleManager().getAxisTickLabelsFont(), frc); - Rectangle tickLabelBounds = layout.getPixelBounds(null, 0, 0); - layout.draw(g, (int) (xOffset + tickLocation - tickLabelBounds.getWidth() / 2.0), yOffset); - - if (tickLabelBounds.getHeight() > maxTickLabelHeight) { - maxTickLabelHeight = (int) tickLabelBounds.getHeight(); + if (tickLabel != null) { // some are null for logarithmic axes + TextLayout layout = new TextLayout(tickLabel, getChart().getStyleManager().getAxisTickLabelsFont(), frc); + Rectangle tickLabelBounds = layout.getPixelBounds(null, 0, 0); + layout.draw(g, (int) (xOffset + tickLocation - tickLabelBounds.getWidth() / 2.0), yOffset); + + if (tickLabelBounds.getHeight() > maxTickLabelHeight) { + maxTickLabelHeight = (int) tickLabelBounds.getHeight(); + } } } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java index 70c99f172a5b646e80f6b6012418ebadcf878e97..2a1dc9242798c160c65480f3636f7e074f5c8699 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java @@ -22,8 +22,8 @@ import java.awt.font.TextLayout; import java.util.Map; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.internal.markers.Marker; -import com.xeiam.xchart.style.Series; /** * @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 86f9aa01c99d5e77c59f38498dbcb66ae09574bb..425a84d42a5afb1602166d82651017d3a0ad9638 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,8 +26,8 @@ import java.util.Iterator; import java.util.Map; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.internal.chartpart.Axis.AxisType; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.StyleManager.ChartType; /** @@ -78,9 +78,17 @@ public class PlotContent implements ChartPart { Collection<?> xData = series.getxData(); BigDecimal xMin = getChart().getAxisPair().getxAxis().getMin(); BigDecimal xMax = getChart().getAxisPair().getxAxis().getMax(); + if (getChart().getStyleManager().isXAxisLogarithmic()) { + xMin = new BigDecimal(Math.log10(xMin.doubleValue())); + xMax = new BigDecimal(Math.log10(xMax.doubleValue())); + } Collection<Number> yData = series.getyData(); BigDecimal yMin = getChart().getAxisPair().getyAxis().getMin(); BigDecimal yMax = getChart().getAxisPair().getyAxis().getMax(); + if (getChart().getStyleManager().isYAxisLogarithmic()) { + yMin = new BigDecimal(Math.log10(yMin.doubleValue())); + yMax = new BigDecimal(Math.log10(yMax.doubleValue())); + } Collection<Number> errorBars = series.getErrorBars(); int previousX = Integer.MIN_VALUE; @@ -103,7 +111,16 @@ public class PlotContent implements ChartPart { // System.out.println(x); } + if (getChart().getStyleManager().isXAxisLogarithmic()) { + x = new BigDecimal(Math.log10(x.doubleValue())); + } + BigDecimal y = new BigDecimal(yItr.next().doubleValue()); + + if (getChart().getStyleManager().isYAxisLogarithmic()) { + y = new BigDecimal(Math.log10(y.doubleValue())); + } + // System.out.println(y); double eb = 0.0; if (errorBars != null) { diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java index efacecbd99e599ff71c5e78149fd2065737e906d..2dc8b452fc757c3c9bdffd86b40cb3a66d601226 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java @@ -27,7 +27,6 @@ import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; -import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; import com.xeiam.xchart.style.StyleManager; @@ -58,6 +57,15 @@ public abstract class AxisTickCalculator { protected final StyleManager styleManager; + /** + * Constructor + * + * @param axisDirection + * @param workingSpace + * @param minValue + * @param maxValue + * @param styleManager + */ public AxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { this.axisDirection = axisDirection; @@ -65,63 +73,15 @@ public abstract class AxisTickCalculator { this.minValue = minValue; this.maxValue = maxValue; this.styleManager = styleManager; - } - BigDecimal getGridStepDecimal(double gridStepHint) { - - // gridStepHint --> significand * 10 ** exponent - // e.g. 724.1 --> 7.241 * 10 ** 2 - double significand = gridStepHint; - int exponent = 0; - if (significand == 0) { - exponent = 1; - } else if (significand < 1) { - while (significand < 1) { - significand *= 10.0; - exponent--; - } - } else { - while (significand >= 10) { - significand /= 10.0; - exponent++; - } - } + BigDecimal pow(double base, int exponent) { - // calculate the grid step with hint. - BigDecimal gridStep; - if (significand > 7.5) { - // gridStep = 10.0 * 10 ** exponent - gridStep = BigDecimal.TEN.multiply(pow(10, exponent)); - } else if (significand > 3.5) { - // gridStep = 5.0 * 10 ** exponent - gridStep = new BigDecimal(new Double(5).toString()).multiply(pow(10, exponent)); - } else if (significand > 1.5) { - // gridStep = 2.0 * 10 ** exponent - gridStep = new BigDecimal(new Double(2).toString()).multiply(pow(10, exponent)); - } else { - // gridStep = 1.0 * 10 ** exponent - gridStep = pow(10, exponent); - } - return gridStep; - } - - /** - * Calculates the value of the first argument raised to the power of the second argument. - * - * @param base the base - * @param exponent the exponent - * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt> - */ - private BigDecimal pow(double base, int exponent) { - - BigDecimal value; if (exponent > 0) { - value = new BigDecimal(new Double(base).toString()).pow(exponent); + return new BigDecimal(base).pow(exponent); } else { - value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent)); + return BigDecimal.ONE.divide(new BigDecimal(base).pow(-exponent)); } - return value; } /** @@ -152,6 +112,17 @@ public abstract class AxisTickCalculator { } + BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { + + BigDecimal firstPosition; + if (min.remainder(gridStep).doubleValue() <= 0.0) { + firstPosition = min.subtract(min.remainder(gridStep)); + } else { + firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep); + } + return firstPosition; + } + public List<Integer> getTickLocations() { return tickLocations; @@ -162,10 +133,8 @@ public abstract class AxisTickCalculator { return tickLabels; } - public abstract BigDecimal getGridStep(int tickSpace); - - public abstract BigDecimal getFirstPosition(BigDecimal minValue, BigDecimal gridStep); - - public abstract AxisType getAxisType(); + // public abstract BigDecimal getGridStep(int tickSpace); + // + // public abstract BigDecimal getFirstPosition(BigDecimal minValue, BigDecimal gridStep); } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java index eb51da94b5fd65282fdd7108ede94d5b100bab81..0397b8119747cc10d273b59fd4c06042074ee1a2 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java @@ -28,7 +28,6 @@ import java.util.Map.Entry; import java.util.TreeMap; import java.util.concurrent.TimeUnit; -import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; @@ -109,8 +108,7 @@ public class DateAxisTickCalculator extends AxisTickCalculator { * @param tickSpace in plot space * @return */ - @Override - public BigDecimal getGridStep(int tickSpace) { + private BigDecimal getGridStep(int tickSpace) { // the span of the data long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space @@ -130,18 +128,6 @@ public class DateAxisTickCalculator extends AxisTickCalculator { return gridStep; } - @Override - public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { - - BigDecimal firstPosition; - if (min.remainder(gridStep).doubleValue() <= 0.0) { - firstPosition = min.subtract(min.remainder(gridStep)); - } else { - firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep); - } - return firstPosition; - } - private long getTimeUnit(long gridStepHint) { for (Entry<Long, int[]> entry : validTickStepsMap.entrySet()) { @@ -193,10 +179,4 @@ public class DateAxisTickCalculator extends AxisTickCalculator { return simpleDateformat.format(value.longValueExact()); } - @Override - public AxisType getAxisType() { - - return AxisType.Date; - } - } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java index 0ea90c666c66ae05b0dd3406fdf7fd5cb31b8041..92aafe7e9c2f9d4cdb816b62f5abe0be329221fa 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java @@ -23,12 +23,12 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator; import java.math.BigDecimal; -import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; +import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; /** - * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for decimal axes + * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for logarithmic axes * * @author timmolter */ @@ -46,98 +46,56 @@ public class LogarithmicAxisTickCalculator extends AxisTickCalculator { public LogarithmicAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) { super(axisDirection, workingSpace, minValue, maxValue, styleManager); + calculate(); } - /** - * Determine the grid step for the data set given the space in pixels allocated for the axis - * - * @param tickSpace in plot space - * @return - */ - @Override - public BigDecimal getGridStep(int tickSpace) { + private void calculate() { - // the span of the data - double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space + // a check if all axis data are the exact same values + if (minValue == maxValue) { + tickLabels.add(formatNumber(maxValue)); + tickLocations.add((int) (workingSpace / 2.0)); + return; + } - int tickMarkSpaceHint = (axisDirection == Direction.X ? DEFAULT_TICK_MARK_STEP_HINT_X : DEFAULT_TICK_MARK_STEP_HINT_Y); + // tick space - a percentage of the working space available for ticks, i.e. 95% + int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space - // for very short plots, squeeze some more ticks in than normal - if (axisDirection == Direction.Y && tickSpace < 160) { - tickMarkSpaceHint = 25; - } + // where the tick should begin in the working space in pixels + int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace); - double gridStepHint = span / tickSpace * tickMarkSpaceHint; - - // gridStepHint --> significand * 10 ** exponent - // e.g. 724.1 --> 7.241 * 10 ** 2 - double significand = gridStepHint; - int exponent = 0; - if (significand == 0) { - exponent = 1; - } else if (significand < 1) { - while (significand < 1) { - significand *= 10.0; - exponent--; - } - } else { - while (significand >= 10) { - significand /= 10.0; - exponent++; - } - } + int logMin = (int) Math.floor(Math.log10(minValue.doubleValue())); + int logMax = (int) Math.ceil(Math.log10(maxValue.doubleValue())); - // calculate the grid step with hint. - BigDecimal gridStep; - if (significand > 7.5) { - // gridStep = 10.0 * 10 ** exponent - gridStep = BigDecimal.TEN.multiply(pow(10, exponent)); - } else if (significand > 3.5) { - // gridStep = 5.0 * 10 ** exponent - gridStep = new BigDecimal(new Double(5).toString()).multiply(pow(10, exponent)); - } else if (significand > 1.5) { - // gridStep = 2.0 * 10 ** exponent - gridStep = new BigDecimal(new Double(2).toString()).multiply(pow(10, exponent)); - } else { - // gridStep = 1.0 * 10 ** exponent - gridStep = pow(10, exponent); - } - return gridStep; - } + final BigDecimal min = new BigDecimal(minValue.doubleValue()); + BigDecimal tickStep = pow(10, logMin - 1); - /** - * Calculates the value of the first argument raised to the power of the second argument. - * - * @param base the base - * @param exponent the exponent - * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt> - */ - private BigDecimal pow(double base, int exponent) { + BigDecimal firstPosition = getFirstPosition(minValue, tickStep); - BigDecimal value; - if (exponent > 0) { - value = new BigDecimal(new Double(base).toString()).pow(exponent); - } else { - value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent)); - } - return value; - } + for (int i = logMin; i <= logMax; i++) { // for each decade - @Override - public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { + for (BigDecimal j = firstPosition; j.doubleValue() <= pow(10, i).doubleValue(); j = j.add(tickStep)) { - BigDecimal firstPosition; - if (min.remainder(gridStep).doubleValue() <= 0.0) { - firstPosition = min.subtract(min.remainder(gridStep)); - } else { - firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep); - } - return firstPosition; - } + // System.out.println(Math.log10(j.doubleValue()) % 1); + + if (j.doubleValue() > maxValue.doubleValue()) { + break; + } - @Override - public AxisType getAxisType() { + // only add labels for the decades + if (Math.log10(j.doubleValue()) % 1 == 0.0) { + tickLabels.add(formatNumber(j)); + } else { + tickLabels.add(null); + } - return AxisType.Number; + // add all the tick marks though + int tickLabelPosition = (int) (margin + (Math.log10(j.doubleValue()) - Math.log10(min.doubleValue())) / (Math.log10(maxValue.doubleValue()) - Math.log10(min.doubleValue())) * tickSpace); + tickLocations.add(tickLabelPosition); + } + tickStep = tickStep.multiply(pow(10, 1)); + firstPosition = tickStep.add(pow(10, i)); + } } + } diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java index 7f286d4d4364a03b067c73c0c1767811cb8b6fec..55540bc0805276968048e0e754067c904b240718 100644 --- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java +++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java @@ -23,7 +23,6 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator; import java.math.BigDecimal; -import com.xeiam.xchart.internal.chartpart.Axis.AxisType; import com.xeiam.xchart.internal.chartpart.Axis.Direction; import com.xeiam.xchart.internal.chartpart.AxisPair; import com.xeiam.xchart.style.StyleManager; @@ -84,8 +83,7 @@ public class NumberAxisTickCalculator extends AxisTickCalculator { * @param tickSpace in plot space * @return */ - @Override - public BigDecimal getGridStep(int tickSpace) { + private BigDecimal getGridStep(int tickSpace) { // the span of the data double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space @@ -135,40 +133,4 @@ public class NumberAxisTickCalculator extends AxisTickCalculator { return gridStep; } - /** - * Calculates the value of the first argument raised to the power of the second argument. - * - * @param base the base - * @param exponent the exponent - * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt> - */ - private BigDecimal pow(double base, int exponent) { - - BigDecimal value; - if (exponent > 0) { - value = new BigDecimal(new Double(base).toString()).pow(exponent); - } else { - value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent)); - } - return value; - } - - @Override - public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) { - - BigDecimal firstPosition; - if (min.remainder(gridStep).doubleValue() <= 0.0) { - firstPosition = min.subtract(min.remainder(gridStep)); - } else { - firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep); - } - return firstPosition; - } - - @Override - public AxisType getAxisType() { - - return AxisType.Number; - } - } diff --git a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java index 060ef115e4d9e48a22cf71a3ab109beeaa12e360..f8a01980e7ba965a53525b27dfeb64a2103d99a1 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java @@ -83,7 +83,7 @@ public enum SeriesLineStyle { * @param seriesMarker * @return an AWT Stroke */ - protected static BasicStroke getBasicStroke(SeriesLineStyle seriesMarker) { + public static BasicStroke getBasicStroke(SeriesLineStyle seriesMarker) { return seriesMarker.basicStroke; } diff --git a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java index 00507e5feb118a46107ba9dba9ae426e981168ad..b840eff4cc032eb302926ade8de6674bb62c40d6 100644 --- a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java +++ b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java @@ -84,6 +84,8 @@ public class StyleManager { private boolean isAxisTicksLineVisible; private int plotPadding; private int axisTitlePadding; + private boolean isXAxisLogarithmic; + private boolean isYAxisLogarithmic; // Chart Plot Area /////////////////////////////// private boolean isPlotGridLinesVisible; @@ -149,6 +151,8 @@ public class StyleManager { isAxisTicksLineVisible = theme.isAxisTicksLineVisible(); plotPadding = theme.getPlotPadding(); axisTitlePadding = theme.getAxisTitlePadding(); + isXAxisLogarithmic = false; + isYAxisLogarithmic = false; // Chart Plot Area /////////////////////////////// isPlotGridLinesVisible = theme.isPlotGridLinesVisible(); @@ -649,6 +653,36 @@ public class StyleManager { return axisTitlePadding; } + /** + * sets the X-Axis to be rendered with a logarithmic scale or not + * + * @param isXAxisLogarithmic + */ + public void setXAxisLogarithmic(boolean isXAxisLogarithmic) { + + this.isXAxisLogarithmic = isXAxisLogarithmic; + } + + public boolean isXAxisLogarithmic() { + + return isXAxisLogarithmic; + } + + /** + * sets the Y-Axis to be rendered with a logarithmic scale or not + * + * @param isYAxisLogarithmic + */ + public void setYAxisLogarithmic(boolean isYAxisLogarithmic) { + + this.isYAxisLogarithmic = isYAxisLogarithmic; + } + + public boolean isYAxisLogarithmic() { + + return isYAxisLogarithmic; + } + // Chart Plot Area /////////////////////////////// /** diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java index 2a8f4b2598d061fc856275062ae33ed4ed5a7865..7561f5b4f8200479a9af86ea4a8f7c8647dfe9e5 100644 --- a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java +++ b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java @@ -20,8 +20,8 @@ import java.util.List; import com.xeiam.xchart.Chart; import com.xeiam.xchart.ChartBuilder; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; import com.xeiam.xchart.style.SeriesMarker; /** diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java index e002be5836898d742d52f1993f0a786f6624d87d..8a4832d3c9da1839ec2288c4626100f9e5cbed6d 100644 --- a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java +++ b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java @@ -25,8 +25,8 @@ import java.util.ArrayList; import java.util.List; import com.xeiam.xchart.Chart; +import com.xeiam.xchart.Series; import com.xeiam.xchart.SwingWrapper; -import com.xeiam.xchart.style.Series; /** * @author timmolter diff --git a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java index 26aff9a68f397fed56006dac069dd5c35803400f..020a6745202e516f35e6ab56bb2cc00b9e4a1879 100644 --- a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java +++ b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java @@ -30,7 +30,7 @@ import java.util.Locale; import org.junit.Test; import com.xeiam.xchart.internal.chartpart.Axis.Direction; -import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator; +import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator; import com.xeiam.xchart.style.StyleManager; /** @@ -44,59 +44,59 @@ public class ValueFormatterTest { public void testNumberFormatting() { StyleManager styleManager = new StyleManager(); - DateAxisTickCalculator dateAxisTickCalculator = new DateAxisTickCalculator(Direction.X, 1000, new BigDecimal(10), new BigDecimal(90), styleManager); + NumberAxisTickCalculator numberAxisTickCalculator = new NumberAxisTickCalculator(Direction.X, 1000, new BigDecimal(10), new BigDecimal(90), styleManager); // big styleManager.setLocale(locale); BigDecimal value = new BigDecimal("1"); - String stringValue = dateAxisTickCalculator.formatNumber(value); + String stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("1")); value = new BigDecimal(1000L); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("1000")); value = new BigDecimal("9999"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("9999")); value = new BigDecimal(20000L); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("2E4")); value = new BigDecimal("200.23"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("200.23")); // small value = new BigDecimal("0.01"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0.01")); value = new BigDecimal("0.001"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0.001")); value = new BigDecimal("0.0012"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0.0012")); value = new BigDecimal("0.0001"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("1E-4")); value = new BigDecimal(".00012"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("1.2E-4")); value = new BigDecimal("0.0"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0")); value = new BigDecimal("0"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0")); // other case @@ -115,21 +115,21 @@ public class ValueFormatterTest { styleManager.setLocale(Locale.GERMANY); value = new BigDecimal("0.01"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("0,01")); value = new BigDecimal("200.23"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("200,23")); styleManager.setNormalDecimalPattern("#.#"); value = new BigDecimal("200.23"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("200,2")); styleManager.setScientificDecimalPattern("0.#E0"); value = new BigDecimal("2009764.23"); - stringValue = dateAxisTickCalculator.formatNumber(value); + stringValue = numberAxisTickCalculator.formatNumber(value); assertThat(stringValue, equalTo("2E6")); }