2012-12-27 6 views
12

Ich habe ein JFree XY-Liniendiagramm, das immer an beginnt x = 0. Dann basierend auf Benutzereinstellungen definiert von einem Eigentümer, die die Anwendung Schritten Datei auf der Grundlage dieser Zahl (dies steht für die Zeit in Minuten)JFreeChart x-Achse Skala

Zum Beispiel x = 0 zum Starten der benutzerdefinierten Einstellung ist 5 - also die Skala geht 0, 5, 10, 15, 20 .... oder die Benutzereinstellung ist 3, so dass es 0, 3, 6, 9, 12 geht ......

ziemlich einfach.

Das Problem, das ich habe, ist die Art und Weise, in der der Graph beginnt. Wenn ich bei 0 beginne, dann ist 0 in der Mitte des Graphen und nicht unten links mit -0,0000005, -0,000004, -0,000003 ... 0,000000, 0,000001, 0,000002 ...... 0,000005

Wie kann ich nur die Skala am unteren Rand manuell hinzufügen, dh definieren Sie es sollte inkremenments von 2 sein und dann behält es es?

Vielen Dank für Ihre Zeit

Antwort

13

Sie sollten NumberAxis verwenden, die eine Menge von Methoden enthält die Skala des Diagramms zu definieren.

Beispiel:

// 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 für 'setTickUnit()'. – trashgod

3

Basierend auf diesen example, hier ist ein sscce die setTickUnit() verwendet die Domäne Achse tick Einheit dynamisch anzupassen, beginnend von dem Wert 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

Wenn dies nicht genau das ist, wonach Sie suchen, kann es helfen, Ihre Frage zu klären. – trashgod