2011-08-29 59 views
16

Bất kỳ đề xuất nào về cách đặt Phạm vi cho trục X và trục Y.Phạm vi thiết lập cho X, Y Trục-JfreeChart

Phạm vi "Trục X" của tôi là từ "0,00 đến 1,00" với chênh lệch "0,05". Ý tôi là 0,00 0,05 0,10 0,15 ..... 0,90 0,95 1,00

Phạm vi "Trục Y" của tôi là từ "0,0 đến 1,0" với chênh lệch "0,1". Ý tôi là 0.0 0.1 0.2 0.3 0.4 ......... 0.9 1.0

Tôi đã thử làm theo cách này, nhưng nó không phản ánh trên đồ thị; Tôi không biết cách áp dụng nó cho 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); 
} 

Bất kỳ trợ giúp nào về vấn đề này đều tuyệt vời.

Trả lời

21

Tôi đoán số lượng NumberAxis mới của bạn không được sử dụng bởi cốt truyện; nó có thể được dễ dàng hơn để sử dụng những cái hiện có từ nhà máy.

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

Cảm ơn Trashgod ... cho ur dụ – Sam

+0

Bạn đang chào đón; bạn cũng có thể kiểm tra ['JFreeChart.createScatterPlot()'] (http://www.jfree.org/jfreechart/api/javadoc/src-html/org/jfree/chart/ChartFactory.html#line.1464). – trashgod

+0

Tôi có thể thay đổi kích thước điểm đánh dấu màu xanh bằng cách nào? Tôi muốn tạo các điểm đánh dấu màu xanh lớn hơn nhưng giữ kích thước màu đỏ không đổi –

15

Trừ khi mã mà bạn dán là không đầy đủ, có vẻ như vấn đề của bạn là bạn không liên kết các đối tượng NumberAxis mà bạn đã tạo với âm mưu của mình.

Thay vì tạo NumberAxis mới đối tượng bằng tay, cố gắng nhận được các đối tượng ValueAxis mặc định có liên quan đến âm mưu của bạn, sau đó thay đổi tính chất của chúng:

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

Cảm ơn các đề xuất .. Tôi sẽ làm điều đó. – Sam

Các vấn đề liên quan