2012-12-27 22 views
12

X = 0は、特性がその番号に基づいてアプリケーション増分ファイルからユーザが定義した設定に基づいてはJFreeChartいつもで開始JFree XY折れ線グラフを有するX軸スケール

(これは分単位の時間を表します)

たとえば、ユーザー定義の設定を開始するx = 0は5です - スケールは0,5,10,15,20 ...になります。ユーザー設定は3ですので0,3,6,9,12になります。 ......

かわいい。

私が抱えている問題は、グラフの開始方法です。 0から始まる場合、0はグラフの中央にあり、左下には-0.0000005、-0.000004、-0.000003 ... 0.000000,0.000001,0.000002 ...... 0.000005

どのように私はちょうど底にスケールを手動で追加することができますか?つまり、それは2の増分でなければならないと定義し、それを維持しますか?お時間を

おかげ

答えて

13

あなたは、チャートのスケールを定義する方法が多く含まれ、NumberAxisを使用する必要があります。

例:

// 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。 – trashgod

3

このexampleに基づき、ここでsscce5から出発して、動的ドメイン軸目盛り部を調整するsetTickUnit()を使用することです。 `setTickUnit()`のため

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

これはあなたの後ろのものではない場合は、あなたの質問を明確にするのに役立ちます。 – trashgod

関連する問題