2011-08-31 23 views
11

Tôi gặp vấn đề sau. Tôi muốn phóng to một Scatterplot và sau đó chọn tất cả các yếu tố được hiển thị.Nhận Diện tích hoặc Phần tử trong Thu phóng Scatterplot

Nó sẽ đủ để bằng cách nào đó có được khu vực được hiển thị trong Scatterplot phóng to. Từ phạm vi của khu vực này tôi có thể xác định các yếu tố được hiển thị trong khu vực và đó không phải là.

\ chỉnh sửa: Tìm thấy các giải pháp (thực hiện AxisChangeListener Interface)

import java.awt.Color; 
import java.awt.Dimension; 

import org.jfree.chart.ChartPanel; 
import org.jfree.chart.event.AxisChangeEvent; 
import org.jfree.chart.event.AxisChangeListener; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 


public class ScatterExample extends ApplicationFrame implements AxisChangeListener { 
/** 
* Creates a new demo instance. 
* @param title the frame title. 
*/ 

private XYSeriesCollection dataset; 
private JFreeChart chart; 


public ScatterExample(String title) { 
    super(title); 

    dataset = createSampleXYDataset(); 

    chart = ChartFactory.createScatterPlot(
      "Scatterplot Demo", // chart title 
      "X", // domain axis label 
      "Y", // range axis label 
      dataset, // data 
      PlotOrientation.VERTICAL, // orientation 
      true, // include legend 
      true, // tooltips? 
      false // URLs? 

    ); 
    //customize chart 
    chart.setBackgroundPaint(Color.white); 
    XYPlot plot = chart.getXYPlot(); 
    plot.setBackgroundPaint(Color.lightGray); 
    plot.setRangeGridlinePaint(Color.white); 

    plot.getRangeAxis().setRange(0.0, 10.0); 
    plot.getRangeAxis().addChangeListener(this); 
    plot.getDomainAxis().setRange(0.0, 10.0); 
    plot.getDomainAxis().addChangeListener(this); 

    ChartPanel chartPanel = new ChartPanel(chart, false); 
    chartPanel.setPreferredSize(new Dimension(500, 500)); 
    setContentPane(chartPanel); 
} 

private XYSeriesCollection createSampleXYDataset() { 
    XYSeriesCollection d = new XYSeriesCollection(); 
    XYSeries ser = new XYSeries("Series 1"); 
    XYSeries ser2 = new XYSeries("Series 2"); 

    ser.add(1.0,2.0); 
    ser.add(2.0,2.0); 
    ser2.add(3.0,2.0); 
    ser.add(3.0,3.0); 
    ser2.add(2.0,5.0); 
    ser.add(1.0,2.0); 
    ser.add(3.0,7.0); 
    ser2.add(4.0,4.0); 

    d.addSeries(ser); 
    d.addSeries(ser2); 

    return d; 
} 

/** 
* Starting point for the demonstration application. 
* @param args ignored. 
*/ 

public static void main(String[] args) { 
    ScatterExample demo = new ScatterExample("Scatterplot Demo"); 
    demo.pack(); 
    RefineryUtilities.centerFrameOnScreen(demo); 
    demo.setVisible(true); 
} 

@Override 
public void axisChanged(AxisChangeEvent event) { 
    if (event.getAxis().equals(chart.getXYPlot().getRangeAxis())){ 
     double rangeLow = chart.getXYPlot().getRangeAxis().getLowerBound(); 
     double rangeUp = chart.getXYPlot().getRangeAxis().getUpperBound(); 

     System.out.println("RangeAxis new range from "+rangeLow+" to "+rangeUp); 
    } 
    else { 
     if (event.getAxis().equals(chart.getXYPlot().getDomainAxis())){ 
      double domainLow = chart.getXYPlot().getDomainAxis().getLowerBound(); 
      double domainUp = chart.getXYPlot().getDomainAxis().getUpperBound(); 

      System.out.println("DomainAxis new range from "+domainLow+" to "+domainUp); 
     } 
    } 
} 
} 
+0

Tìm thấy một giải pháp ngay lập tức sau khi đăng bằng cách triển khai giao diện AxisChangeListener – dennis

+0

đã thêm mã ở trên – dennis

Trả lời

0

Các poster tìm thấy một giải pháp cho điều này bằng cách bằng cách có lớp ScatterExample kế thừa giao diện AxisChangeListener:

public class ScatterExample extends ApplicationFrame implements AxisChangeListener { 
/** 
* Creates a new demo instance. 
* @param title the frame title. 
*/ 

private XYSeriesCollection dataset; 
private JFreeChart chart; 


public ScatterExample(String title) { 
    super(title); 

    dataset = createSampleXYDataset(); 

    chart = ChartFactory.createScatterPlot(
      "Scatterplot Demo", // chart title 
      "X", // domain axis label 
      "Y", // range axis label 
      dataset, // data 
      PlotOrientation.VERTICAL, // orientation 
      true, // include legend 
      true, // tooltips? 
      false // URLs? 

    ); 
    //customize chart 
    chart.setBackgroundPaint(Color.white); 
    XYPlot plot = chart.getXYPlot(); 
    plot.setBackgroundPaint(Color.lightGray); 
    plot.setRangeGridlinePaint(Color.white); 

    plot.getRangeAxis().setRange(0.0, 10.0); 
    plot.getRangeAxis().addChangeListener(this); 
    plot.getDomainAxis().setRange(0.0, 10.0); 
    plot.getDomainAxis().addChangeListener(this); 

    ChartPanel chartPanel = new ChartPanel(chart, false); 
    chartPanel.setPreferredSize(new Dimension(500, 500)); 
    setContentPane(chartPanel); 
} 

private XYSeriesCollection createSampleXYDataset() { 
    XYSeriesCollection d = new XYSeriesCollection(); 
    XYSeries ser = new XYSeries("Series 1"); 
    XYSeries ser2 = new XYSeries("Series 2"); 

    ser.add(1.0,2.0); 
    ser.add(2.0,2.0); 
    ser2.add(3.0,2.0); 
    ser.add(3.0,3.0); 
    ser2.add(2.0,5.0); 
    ser.add(1.0,2.0); 
    ser.add(3.0,7.0); 
    ser2.add(4.0,4.0); 

    d.addSeries(ser); 
    d.addSeries(ser2); 

    return d; 
} 

/** 
* Starting point for the demonstration application. 
* @param args ignored. 
*/ 

public static void main(String[] args) { 
    ScatterExample demo = new ScatterExample("Scatterplot Demo"); 
    demo.pack(); 
    RefineryUtilities.centerFrameOnScreen(demo); 
    demo.setVisible(true); 
} 

@Override 
public void axisChanged(AxisChangeEvent event) { 
    if (event.getAxis().equals(chart.getXYPlot().getRangeAxis())){ 
     double rangeLow = chart.getXYPlot().getRangeAxis().getLowerBound(); 
     double rangeUp = chart.getXYPlot().getRangeAxis().getUpperBound(); 

     System.out.println("RangeAxis new range from "+rangeLow+" to "+rangeUp); 
    } 
    else { 
     if (event.getAxis().equals(chart.getXYPlot().getDomainAxis())){ 
      double domainLow = chart.getXYPlot().getDomainAxis().getLowerBound(); 
      double domainUp = chart.getXYPlot().getDomainAxis().getUpperBound(); 

      System.out.println("DomainAxis new range from "+domainLow+" to "+domainUp); 
     } 
    } 
} 
}