From 4b70ad19213e88a35cf68c3547f18dc3bb6b27e4 Mon Sep 17 00:00:00 2001 From: Tim Molter <tim.molter@gmail.com> Date: Sat, 18 Jun 2011 10:42:26 +0200 Subject: [PATCH] fixed horizontal and vertical plotting bug --- src/com/xeiam/xcharts/AxisTick.java | 12 ++- src/com/xeiam/xcharts/AxisTickLabels.java | 2 +- src/com/xeiam/xcharts/PlotContent.java | 10 +++ src/com/xeiam/xcharts/example/SwingChart.java | 22 ++--- .../xeiam/xcharts/example/SwingChart3.java | 85 +++++++++++++++++++ 5 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 src/com/xeiam/xcharts/example/SwingChart3.java diff --git a/src/com/xeiam/xcharts/AxisTick.java b/src/com/xeiam/xcharts/AxisTick.java index 613468f8..61c8c502 100644 --- a/src/com/xeiam/xcharts/AxisTick.java +++ b/src/com/xeiam/xcharts/AxisTick.java @@ -149,6 +149,12 @@ public class AxisTick implements IChartPart { // System.out.println("b= " + b); tickLabels.add(format(b.doubleValue())); int tickLabelPosition = (int) (leftMargin + ((b.doubleValue() - axis.getMin()) / (axis.getMax() - axis.getMin()) * tickSpace)); + + // a check if all axis data are the exact same values + if (Math.abs(axis.getMax() - axis.getMin()) / 5 == 0.0) { + tickLabelPosition = (int) (leftMargin + tickSpace / 2.0); + } + tickLocations.add(tickLabelPosition); } } @@ -162,7 +168,11 @@ public class AxisTick implements IChartPart { // e.g. 724.1 --> 7.241 * 10 ** 2 double mantissa = gridStepHint; int exponent = 0; - if (mantissa < 1) { + if (mantissa == 0) { + // mantissa = 0.0; + exponent = 1; + + } else if (mantissa < 1) { while (mantissa < 1) { mantissa *= 10.0; exponent--; diff --git a/src/com/xeiam/xcharts/AxisTickLabels.java b/src/com/xeiam/xcharts/AxisTickLabels.java index 5bb63620..c502526c 100644 --- a/src/com/xeiam/xcharts/AxisTickLabels.java +++ b/src/com/xeiam/xcharts/AxisTickLabels.java @@ -60,7 +60,7 @@ public class AxisTickLabels implements IChartPart { g.setColor(foreground); - if (axis.getDirection() == Axis.Direction.Y) { + if (axis.getDirection() == Axis.Direction.Y) { // Y-Axis int xOffset = (int) (axis.getAxisTitle().getBounds().getX() + axis.getAxisTitle().getBounds().getWidth()); int yOffset = (int) (axis.getPaintZone().getY()); diff --git a/src/com/xeiam/xcharts/PlotContent.java b/src/com/xeiam/xcharts/PlotContent.java index 47c15ed4..e4c96288 100644 --- a/src/com/xeiam/xcharts/PlotContent.java +++ b/src/com/xeiam/xcharts/PlotContent.java @@ -75,6 +75,16 @@ public class PlotContent implements IChartPart { int xTransform = (int) (xLeftMargin + ((xData[i] - xMin) / (xMax - xMin) * xTickSpace)); int yTransform = (int) (bounds.getHeight() - (yLeftMargin + (yData[i] - yMin) / (yMax - yMin) * yTickSpace)); + // a check if all y data are the exact same values + if (Math.abs(xMax - xMin) / 5 == 0.0) { + xTransform = (int) (bounds.getWidth() / 2.0); + } + + // a check if all y data are the exact same values + if (Math.abs(yMax - yMin) / 5 == 0.0) { + yTransform = (int) (bounds.getHeight() / 2.0); + } + int xOffset = (int) (bounds.getX() + xTransform - 1); int yOffset = (int) (bounds.getY() + yTransform); diff --git a/src/com/xeiam/xcharts/example/SwingChart.java b/src/com/xeiam/xcharts/example/SwingChart.java index 7770c044..d6a7487d 100644 --- a/src/com/xeiam/xcharts/example/SwingChart.java +++ b/src/com/xeiam/xcharts/example/SwingChart.java @@ -32,18 +32,18 @@ public class SwingChart { private static void createAndShowGUI() { - // generates sine data - int size = 100; - double[] xData1 = new double[size + 1]; - double[] yData1 = new double[size + 1]; - for (int i = 0; i <= size; i++) { - double radians = (Math.PI / (size / 2) * i); - xData1[i] = i - size / 2; - yData1[i] = size * Math.sin(radians); - } + // // generates sine data + // int size = 100; + // double[] xData1 = new double[size + 1]; + // double[] yData1 = new double[size + 1]; + // for (int i = 0; i <= size; i++) { + // double radians = (Math.PI / (size / 2) * i); + // xData1[i] = i - size / 2; + // yData1[i] = size * Math.sin(radians); + // } // generates linear data - int size2 = 40; + int size2 = 100; double[] xData2 = new double[size2 + 1]; double[] yData2 = new double[size2 + 1]; for (int i = 0; i <= size2; i++) { @@ -68,7 +68,7 @@ public class SwingChart { // chart.setAxisTitlesVisible(false); // Series 1 - Series series1 = chart.addSeries("y=sin(x)", xData1, yData1); + // Series series1 = chart.addSeries("y=sin(x)", xData1, yData1); // series1.setLineColor(SeriesColor.PURPLE); // series1.setLineStyle(SeriesLineStyle.NONE); // series1.setMarkerColor(SeriesColor.GREEN); diff --git a/src/com/xeiam/xcharts/example/SwingChart3.java b/src/com/xeiam/xcharts/example/SwingChart3.java new file mode 100644 index 00000000..c0e74bd2 --- /dev/null +++ b/src/com/xeiam/xcharts/example/SwingChart3.java @@ -0,0 +1,85 @@ +/** + * Copyright 2011 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.xcharts.example; + +import java.awt.BorderLayout; + +import javax.swing.JFrame; +import javax.swing.JPanel; + +import com.xeiam.xcharts.Chart; +import com.xeiam.xcharts.JChartPanel; +import com.xeiam.xcharts.series.Series; + +/** + * Demonstrated/Tests plotting horizontal and vertical lines + * + * @author timmolter + */ +public class SwingChart3 { + + private static void createAndShowGUI() { + + // generates linear data + double[] xData1 = new double[] { 0.0, 1.0, 2.0 }; + double[] yData1 = new double[] { 0.0, 0.0, 0.0 }; + double[] xData2 = new double[] { 0.0, 0.0, 0.0 }; + double[] yData2 = new double[] { 0.0, 1.0, 2.0 }; + + // Create and set up the window. + JFrame frame = new JFrame("XChart"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setUndecorated(true); + + // Create Chart + Chart chart = new Chart(800, 600); + + // Customize Chart + chart.setChartTitle("Sample Chart"); + chart.setXAxisTitle("X"); + chart.setYAxisTitle("Y"); + // chart.setChartTitleVisible(false); + // chart.setChartLegendVisible(false); + // chart.setAxisTitlesVisible(false); + + // Series + Series series1 = chart.addSeries("y=0", xData1, yData1); + Series series2 = chart.addSeries("x=0", xData2, yData2); + + // Swing + JPanel chartPanel = new JChartPanel(chart); + + // add the panel to the content pane + frame.getContentPane().add(chartPanel, BorderLayout.CENTER); + + // Display the window + frame.pack(); + frame.setLocationRelativeTo(null); // centers on screen + frame.setVisible(true); + } + + public static void main(String[] args) { + + // Schedule a job for the event-dispatching thread: + // creating and showing this application's GUI. + javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + createAndShowGUI(); + } + }); + } +} -- GitLab