From 6a4571286cd12d919ce5e43b8649da7bbdabfac2 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Thu, 21 Feb 2013 09:23:46 +0100 Subject: [PATCH] added logarithmic axes --- .../com/xeiam/xchart/demo/XChartDemo.java | 3 + .../demo/charts/{line => }/ExampleChart.java | 4 +- .../xchart/demo/charts/area/AreaChart01.java | 2 +- .../xchart/demo/charts/bar/BarChart01.java | 2 +- .../xchart/demo/charts/date/DateChart01.java | 4 +- .../xchart/demo/charts/date/DateChart02.java | 4 +- .../xchart/demo/charts/date/DateChart03.java | 4 +- .../xchart/demo/charts/date/DateChart04.java | 4 +- .../xchart/demo/charts/date/DateChart05.java | 4 +- .../xchart/demo/charts/date/DateChart06.java | 4 +- .../xchart/demo/charts/date/DateChart07.java | 4 +- .../xchart/demo/charts/line/LineChart01.java | 3 +- .../xchart/demo/charts/line/LineChart02.java | 3 +- .../xchart/demo/charts/line/LineChart03.java | 1 + .../xchart/demo/charts/line/LineChart05.java | 1 + .../xchart/demo/charts/line/LineChart06.java | 1 + .../xchart/demo/charts/line/LineChart07.java | 1 + .../xchart/demo/charts/line/LineChart08.java | 3 +- .../xchart/demo/charts/line/LineChart09.java | 3 +- .../xchart/demo/charts/line/LineChart10.java | 3 +- .../xchart/demo/charts/line/LineChart11.java | 1 + .../demo/charts/scatter/ScatterChart01.java | 2 +- .../demo/charts/scatter/ScatterChart02.java | 76 +++++++++++ .../src/main/java/com/xeiam/xchart/Chart.java | 1 - .../java/com/xeiam/xchart/QuickChart.java | 1 - .../com/xeiam/xchart/{style => }/Series.java | 6 +- .../xchart/internal/chartpart/AxisPair.java | 2 +- .../xchart/internal/chartpart/AxisTick.java | 11 +- .../internal/chartpart/AxisTickLabels.java | 14 +- .../xchart/internal/chartpart/Legend.java | 2 +- .../internal/chartpart/PlotContent.java | 19 ++- .../AxisTickCalculator.java | 83 ++++-------- .../DateAxisTickCalculator.java | 22 +--- .../LogarithmicAxisTickCalculator.java | 122 ++++++------------ .../NumberAxisTickCalculator.java | 40 +----- .../xeiam/xchart/style/SeriesLineStyle.java | 2 +- .../com/xeiam/xchart/style/StyleManager.java | 34 +++++ .../java/com/xeiam/xchart/chart/Example2.java | 2 +- .../java/com/xeiam/xchart/chart/NoBug.java | 2 +- .../xeiam/xchart/unit/ValueFormatterTest.java | 36 +++--- 40 files changed, 278 insertions(+), 258 deletions(-) rename xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/{line => }/ExampleChart.java (96%) create mode 100644 xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java rename xchart/src/main/java/com/xeiam/xchart/{style => }/Series.java (96%) 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 ce69b6b9..45c335b6 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 cfe44b64..7e26d815 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 7e36c715..2176779e 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 1b23ded0..24b32ea7 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 d0194a96..d100041d 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 fd2db2f1..00d1e956 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 157d8215..b13aaacc 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 cf0ae770..bb3e9901 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 b71be652..7277b3b8 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 09d66139..c574840c 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 0a7b999b..305fd2f0 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 2291ad4a..2c40b189 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 e1b558d8..19c78112 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 3404c6e8..d2e7afbb 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 ca77de2e..b8abf222 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 de073739..a49c0b17 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 1e54855e..e1c39758 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 1d025112..0191eee1 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 c91f5353..701ee74e 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 2b56b2d3..479af8b0 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 e42a0195..f2b3ba56 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 9b8dadf1..3883fe6a 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 00000000..1dd23506 --- /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 17e51c29..ac5fa6df 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 2d4249b0..7450bc0c 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 e701cd7d..638ee8ad 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 668b6559..7d7e08f2 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 3274a342..c0a96ea1 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 2cbabd21..c40585e8 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 70c99f17..2a1dc924 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 86f9aa01..425a84d4 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 efacecbd..2dc8b452 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 eb51da94..0397b811 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 0ea90c66..92aafe7e 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 7f286d4d..55540bc0 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 060ef115..f8a01980 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 00507e5f..b840eff4 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 2a8f4b25..7561f5b4 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 e002be58..8a4832d3 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 26aff9a6..020a6745 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")); } -- GitLab