2012-12-27 32 views
12

Mam wykres JFree XY linii, która uruchamia się zawsze przy x = 0. Następnie na podstawie zdefiniowanych przez użytkownika ustawień z pliku właściwości przyrosty aplikacji opartych na tej liczby (to oznacza czas w minutach)JFreeChart skala osi x

Na przykład x = 0, aby rozpocząć ustawienie zdefiniowane przez użytkownika to 5 - więc skala przyjmuje 0, 5, 10, 15, 20 .... lub ustawienie użytkownika wynosi 3, więc idzie 0, 3, 6, 9, 12 ......

całkiem proste.

Problem, który mam, to sposób, w jaki zaczyna się wykres. Jeśli zaczynam od 0, to 0 znajduje się pośrodku wykresu, a nie w lewym dolnym rogu z -0,0000005, -0,000004, -0,000003 ..... 0,000000, 0,000001, 0,000002 ...... 0,000005

jak mogę po prostu ręcznie dodać skalę na dole, tj. Zdefiniować, że powinna być incrememnts 2, a następnie utrzymuje go?

Dzięki za poświęcony czas

Odpowiedz

13

Należy wykorzystać NumberAxis, która zawiera wiele metod, aby określić skalę wykresu.

przykład:

// Create an XY Line chart 
XYSeries series = new XYSeries("Random Data"); 
series.add(1.0, 500.2); 
series.add(10.0, 694.1); 
XYSeriesCollection data = new XYSeriesCollection(series); 
JFreeChart chart = ChartFactory.createXYLineChart("XY Series Demo", "X", "Y", data, 
                PlotOrientation.VERTICAL, 
                true, true, false); 

// Create an NumberAxis 
NumberAxis xAxis = new NumberAxis(); 
xAxis.setTickUnit(new NumberTickUnit(2)); 

// Assign it to the chart 
XYPlot plot = (XYPlot) chart.getPlot(); 
plot.setDomainAxis(xAxis); 
+1

+1 dla 'setTickUnit()'. – trashgod

3

Na podstawie tego example tutaj jest sscce który wykorzystuje setTickUnit() dostosować urządzenie osi domeny kleszczy dynamicznie, począwszy od wartości 5.

image

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.util.Random; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSpinner; 
import javax.swing.SpinnerNumberModel; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.axis.NumberTickUnit; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 

/** @see https://stackoverflow.com/a/14167983/230513 */ 
public class SSCCE { 

    private static final int COUNT = 100; 
    private static final int UNITS = 5; 
    private static final Random r = new Random(); 

    public static void main(String[] args) { 
     XYSeries series = new XYSeries("Data"); 
     for (int i = 0; i < COUNT; i++) { 
      series.add(i, r.nextGaussian()); 
     } 
     XYSeriesCollection data = new XYSeriesCollection(series); 
     final JFreeChart chart = ChartFactory.createXYLineChart("TickUnits", 
      "X", "Y", data, PlotOrientation.VERTICAL, true, true, false); 
     XYPlot plot = (XYPlot) chart.getPlot(); 
     final NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); 
     xAxis.setTickUnit(new NumberTickUnit(UNITS)); 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame("TickUnitDemo"); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.add(new ChartPanel(chart)); 
       final JSpinner spinner = new JSpinner(
        new SpinnerNumberModel(UNITS, 1, COUNT, 1)); 
       spinner.addChangeListener(new ChangeListener() { 

        @Override 
        public void stateChanged(ChangeEvent e) { 
         JSpinner s = (JSpinner) e.getSource(); 
         Number n = (Number) s.getValue(); 
         xAxis.setTickUnit(new NumberTickUnit(n.intValue())); 
        } 
       }); 
       JPanel p = new JPanel(); 
       p.add(new JLabel(chart.getTitle().getText())); 
       p.add(spinner); 
       f.add(p, BorderLayout.SOUTH); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 
     }); 

    } 
} 
+0

Jeśli nie jest to dokładnie to, czego szukasz, może pomóc w wyjaśnieniu Twojego pytania. – trashgod