2011-08-29 84 views
16

X軸とY軸の範囲の設定方法に関するご提案です。X、Y軸の設定範囲-JfreeChart

私の "X軸"の範囲は、 "0.05"の差が "0.00から1.00"までです。私が意味するのは0.00 0.05 0.10 0.1 ... ..... 0.90 0.95 1.00

私の "Y軸"の範囲は "0.1"の差で "0.0から1.0"までです。私は0.0 0.1 0.2 0.3 0.4 ......... 0.9 1.0

私はこの方法を試みましたが、それはグラフに反映されていません。私はそれをChartFactory.createScatterPlot()に適用する方法を知らない。

final NumberAxis domainAxis = new NumberAxis("X-Axis"); 
domainAxis.setRange(0.00,1.00); 
domainAxis.setTickUnit(new NumberTickUnit(0.1)); 
final NumberAxis rangeAxis = new NumberAxis("Y-Axis"); 
rangeAxis.setRange(0.0,1.0); 
rangeAxis.setTickUnit(new NumberTickUnit(0.05)); 

public JPanel createDemoPanel() { 
    XYDataset dataset1 = samplexydataset2(); 
    JFreeChart jfreechart = ChartFactory.createScatterPlot("Scatter Plot Demo", 
     "X", "Y",dataset1, PlotOrientation.VERTICAL, true, true, false); 
} 

これに関する助けがあれば助かります。

答えて

21

新しいNumberAxisインスタンスがプロットで使用されていないと思います。工場の既存のものを使用する方が簡単かもしれません。

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.util.*; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import org.jfree.chart.*; 
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.chart.renderer.xy.XYItemRenderer; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 

/** 
* @see http://stackoverflow.com/questions/7231824 
* @see http://stackoverflow.com/questions/7205742 
* @see http://stackoverflow.com/questions/7208657 
* @see http://stackoverflow.com/questions/7071057 
*/ 
public class ScatterAdd extends JFrame { 

    private static final int N = 8; 
    private static final String title = "Scatter Add Demo"; 
    private static final Random rand = new Random(); 
    private XYSeries added = new XYSeries("Added"); 

    public ScatterAdd(String s) { 
     super(s); 
     final ChartPanel chartPanel = createDemoPanel(); 
     this.add(chartPanel, BorderLayout.CENTER); 
     JPanel control = new JPanel(); 
     control.add(new JButton(new AbstractAction("Add") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < N; i++) { 
        added.add(rand.nextDouble(), rand.nextDouble()); 
       } 
      } 
     })); 
     this.add(control, BorderLayout.SOUTH); 
    } 

    private ChartPanel createDemoPanel() { 
     JFreeChart jfreechart = ChartFactory.createScatterPlot(
      title, "X", "Y", createSampleData(), 
      PlotOrientation.VERTICAL, true, true, false); 
     XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); 
     xyPlot.setDomainCrosshairVisible(true); 
     xyPlot.setRangeCrosshairVisible(true); 
     XYItemRenderer renderer = xyPlot.getRenderer(); 
     renderer.setSeriesPaint(0, Color.blue); 
     NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis(); 
     domain.setRange(0.00, 1.00); 
     domain.setTickUnit(new NumberTickUnit(0.1)); 
     domain.setVerticalTickLabels(true); 
     NumberAxis range = (NumberAxis) xyPlot.getRangeAxis(); 
     range.setRange(0.0, 1.0); 
     range.setTickUnit(new NumberTickUnit(0.1)); 
     return new ChartPanel(jfreechart); 
    } 

    private XYDataset createSampleData() { 
     XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); 
     XYSeries series = new XYSeries("Random"); 
     for (int i = 0; i < N * N; i++) { 
      double x = rand.nextDouble(); 
      double y = rand.nextDouble(); 
      series.add(x, y); 
     } 
     xySeriesCollection.addSeries(series); 
     xySeriesCollection.addSeries(added); 
     return xySeriesCollection; 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ScatterAdd demo = new ScatterAdd(title); 
       demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       demo.pack(); 
       demo.setLocationRelativeTo(null); 
       demo.setVisible(true); 
      } 
     }); 
    } 
} 
+0

おかげTrashgodは...ウル例えば – Sam

+0

どういたしまして。 ['JFreeChart.createScatterPlot()'](http://www.jfree.org/jfreechart/api/javadoc/src-html/org/jfree/chart/ChartFactory.html#line.1464)自体を調べることもできます。 – trashgod

+0

青いマーカーのサイズを変更するにはどうすればよいですか?私は青色のマーカーを大きくしたいが、赤色のマーカーのサイズは変わらないようにする。 –

15

貼り付けたコードが不完全である場合を除き、あなたの問題は、あなたがあなたのプロットを作成したNumberAxisオブジェクトを関連付けることはなかったように、それが見えます。代わりに新しいNumberAxisを作成する

オブジェクトを手動で、あなたのプロットに関連付けられているデフォルトValueAxisオブジェクトを取得しようとは、その後、そのプロパティを変更する:

XYPlot xyPlot = jfreechart.getXYPlot(); 
ValueAxis domainAxis = xyPlot.getDomainAxis(); 
ValueAxis rangeAxis = xyPlot.getRangeAxis(); 

domainAxis.setRange(0.0, 1.0); 
domainAxis.setTickUnit(new NumberTickUnit(0.1)); 
rangeAxis.setRange(0.0, 1.0); 
rangeAxis.setTickUnit(new NumberTickUnit(0.05)); 
+0

提案していただきありがとうございます。私はそれを行います。 – Sam

関連する問題