2012-08-12 13 views
5

मैं ग्राफ़ खींचने के लिए JFreeChart का उपयोग कर रहा हूं। कोडहाइलाइट किए गए बिंदुओं के साथ JFreeChart

package com.daya; 

import java.awt.Color; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

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

public class Two extends ApplicationFrame { 

    public Two(final String title) { 
     super(title); 
     final XYDataset dataset = createDataset(); 
     final JFreeChart chart = createChart(dataset); 
     final ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setPreferredSize(new java.awt.Dimension(1200, 1100)); 
     setContentPane(chartPanel); 
    } 

    private XYDataset createDataset() { 
     final XYSeries series1 = new XYSeries("SLMM"); 
     final XYSeries series2 = new XYSeries("FSPM"); 
     XYSeries series = new XYSeries("Power Comparision"); 
     final XYSeriesCollection dataset = new XYSeriesCollection(); 
     try { 
      FileInputStream fstream = new FileInputStream("d:\\devs\\Result.txt"); 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 
      StringBuffer buffer = new StringBuffer(); 
      while ((strLine = br.readLine()) != null) { 
       buffer.append(strLine); 
      } 
      String message = buffer.toString(); 
      message = message.replaceAll(" ", ""); 
      String[] splitMessage = message.split("&&&"); 
      for (int i = 0; i < splitMessage.length; i++) { 
       double x = 0.0, y = 0.0; 
       String algType = "direct"; 
       String[] insideSplit = splitMessage[i].split("\\|\\|"); 
       if (insideSplit[0].equalsIgnoreCase("isStraightAlg:false")) { 
        algType = "indirect"; 
       } 
       for (int j = 1; j < insideSplit.length; j++) { 
        String[] valueSplit = insideSplit[j].split("\\:"); 
        if (valueSplit[0].equalsIgnoreCase("Transactions")) { 
         x = Double.parseDouble(valueSplit[1]); 
        } else { 
         y = Double.parseDouble(valueSplit[1]); 
        } 
        //System.out.println(valueSplit[1]); 
       } 

       if (!algType.equalsIgnoreCase("direct")) { 
        System.out.println("X :" + x + " Y:" + y); 
        series1.add(x, y); 
       } else { 
        System.out.println("X :" + x + " Y:" + y); 
        series2.add(x, y); 
       } 
      } 


      dataset.addSeries(series1); 
      dataset.addSeries(series2); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return dataset; 
    } 

    private JFreeChart createChart(final XYDataset dataset) { 
     final JFreeChart chart = ChartFactory.createXYLineChart(
      "Power Comparison", 
      "Transaction", 
      "Energy", 
      dataset, 
      PlotOrientation.VERTICAL, 
      true, 
      true, 
      false); 
     chart.setBackgroundPaint(Color.white); 
     final XYPlot plot1 = chart.getXYPlot(); 
     plot1.setBackgroundPaint(Color.lightGray); 
     plot1.setDomainGridlinePaint(Color.white); 
     plot1.setRangeGridlinePaint(Color.white); 

     final XYPlot plot2 = chart.getXYPlot(); 
     plot2.setBackgroundPaint(Color.lightGray); 
     plot2.setDomainGridlinePaint(Color.white); 
     plot2.setRangeGridlinePaint(Color.white); 

     return chart; 
    } 

    public static void main(final String[] args) { 
     final Two demo = new Two("Multi Line Chart"); 
     demo.pack(); 
     RefineryUtilities.centerFrameOnScreen(demo); 
     demo.setVisible(true); 
    } 
} 

है और पाठ फ़ाइल है:

isStraightAlg: झूठी || लेनदेन: 500 || ऊर्जा: 74267 & & & isStraightAlg: true || लेनदेन: 500 || ऊर्जा: 55 9 84 & & & isStraightAlg: false || लेनदेन: 1000 || ऊर्जा: 16 9 735 & & & isStraightAlg: true || लेनदेन: 1000 || ऊर्जा: 162520 & & & isStraightAlg: false || लेनदेन: 1500 || ऊर्जा: 333668 & & & isStraightAlg: true || लेनदेन: 1500 || ऊर्जा: 313766 & & & isStraightAlg: false || लेनदेन: 2000 || ऊर्जा: 49415 9 & & & isStraightAlg: true || लेनदेन: 2000 || ऊर्जा: 481627 & & & isStraightAlg: false || लेनदेन: 2500 || ऊर्जा: 5 9 4839 & & & isStraightAlg: true || लेनदेन: 2500 || ऊर्जा: 5 9 4839 & & & isStraightAlg: false || लेनदेन: 3000 || ऊर्जा: 8470 9 6 & & & isStraightAlg: true || लेनदेन: 3000 || ऊर्जा: 842402 & & &

ऊपर कोड ग्राफ तैयार की है साथ

। ग्राफ नीचे दिखाया गया है। ग्राफ़ खींचा जाने के लिए मैं सटीक बिंदु कैसे दिखा सकता हूं, यानी xy बिंदु को सर्कल के साथ प्रस्तुत करना है?

enter image description here

+0

मैं शैक्षिक छात्र हूं। मैं जेएफरी में नया हूं। कृपया मुझे [sscce] (http://sscce.org/) के लिए – Daya

+0

+1 का सुझाव दें। – trashgod

+2

जब आप स्ट्रिंगबिल्डर का उपयोग कर सकते हैं तो कृपया स्ट्रिंगबफर का उपयोग न करें। –

उत्तर

6

ChartFactory.createXYAreaChart() एक XYAreaRenderer उपयोग करता है। संबंधित के लिए here दिखाए गए अनुसार, AbstractRenderer में दृश्यों की दृश्यता और उपस्थिति को बदलने के तरीके हैं।

परिशिष्ट: आपका पूरा उदाहरण ChartFactory.createXYLineChart() को आमंत्रित करता है, जो आंतरिक रूप से XYLineAndShapeRenderer का उपयोग करता है। नीचे दी गई छवि createChart() में ये पंक्तियां जोड़ने से हुई:

XYLineAndShapeRenderer renderer = 
    (XYLineAndShapeRenderer) plot1.getRenderer(); 
renderer.setBaseShapesVisible(true); 

image

+0

मेरे पास jcommon.jar और jfreechart0.9.20.jar है। मुझे renderer.setUseFillPaint (सत्य) पर संकलन समस्या का सामना करना पड़ रहा है; – Daya

+0

वर्तमान jfreechart 1.0.14 और jcommon 1.0.17 है। – trashgod

+0

मैंने अपना पूरा कोड अपडेट किया है। मुझे ग्राफ की तुलना करने की ज़रूरत है। कृपया मुझे सुझाव दें कि मुझे संशोधन करने की आवश्यकता है। मैं छात्र हूँ। मैं जेएफरी के लिए नया हूँ। मेरे अकादमिक प्रोजेक्ट के लिए मैंने – Daya

2
plot1.setRangeGridlinePaint(Color.white); // your existing code 
java.awt.geom.Ellipse2D.Double shape = new java.awt.geom.Ellipse2D.Double(-2.0, -2.0, 4.0, 4.0); 
plot1.getRenderer().setBaseShape(shape); 
// or maybe plot1.getRenderer().setSeriesShape(0, shape); 
+0

मैं jfree के लिए नया हूँ। मैं समझने में असमर्थ हूं कि कोड कहां बदलना है। मैं कॉलेज के छात्र हूं .. तो कृपया स्पष्ट विचार दें .. मैं इसे अपने प्रोजेक्ट – Daya

+0

के लिए उपयोग कर रहा हूं 'चार्टफैक्टरी.क्रेटेक्सएएरिया चार्ट()' द्वारा लौटा गया चार्ट 'LineAndShapeRenderer' का उपयोग नहीं करता है, जो 'श्रेणी ItemRenderer' है। – trashgod

+0

chart.getPlot() XYPlot को वापस करना चाहिए। –

संबंधित मुद्दे