2011-08-31 17 views
11

मुझे निम्न समस्या मिली है। मैं एक स्कैटरप्लॉट में ज़ूम-इन करना चाहता हूं और फिर सभी प्रदर्शित तत्वों का चयन करना चाहता हूं।ज़ूम किए गए क्षेत्र या तत्वों को ज़ूम किया गया स्कैटरप्लॉट

किसी भी तरह से ज़ूम किए गए स्कैटरप्लॉट में प्रदर्शित क्षेत्र को प्राप्त करने के लिए पर्याप्त होगा। इस क्षेत्र की सीमा से मैं निर्धारित कर सकता हूं कि क्षेत्र में कौन से तत्व प्रदर्शित होते हैं और जो नहीं हैं।

\ संपादित करें: मिला समाधान (कार्यान्वयन AxisChangeListener इंटरफेस)

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

एक समाधान तुरंत मिले एक्सिस चेंजलिस्टर इंटरफ़ेस – dennis

+0

ऊपर दिए गए कोड को लागू करके पोस्ट करने के बाद – dennis

उत्तर

0

पोस्टर ScatterExample वर्ग होने से इस से करने के लिए एक समाधान नहीं मिला वारिस 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); 
     } 
    } 
} 
}