2013-08-09 4 views
0

Я пытаюсь прочитать каждый файл csv из каталога и выполнить некоторые вычисления, используя соотношение из каждой категории, чтобы нарисовать круговую диаграмму с помощью JFreeChart. Используя PieChartDemo1.java в качестве образца, где я должен указать FileReader и передать переменные в datasest? Я продолжал получать сообщение об ошибке от компилятора. У меня будет демонстрация в ближайшее время через неделю, любая помощь будет оценена!Прочтите файл csv, чтобы нарисовать круговую диаграмму в JfreeChart

 DefaultPieDataset dataset = new DefaultPieDataset(); 
     //FileReader... 
     //int sum = countA + countB + countC; 
     //double ratioA = countA/double(sum) * 100.0; 
     //..... 
     dataset.setValue("Category A", new Double(ratioA)); 
     dataset.setValue("Category B", new Double(ratioB)); 
     dataset.setValue("Category C", new Double(ratioC)); 
     //.... 
+0

Я, лично, хотел бы начать с помощью approripate библиотеки для чтения файла CSV, сказать что-то вроде [opencsv] (http://opencsv.sourceforge.net/) – MadProgrammer

+0

@trashgod Должен сказать, дон» У меня большой опыт работы с JFreeChart ... к сожалению: P – MadProgrammer

ответ

0

В итоге я прочитал * .csv файл как обычный текстовый файл из каталога, по одному файлу за раз, вычислил коэффициент, основанный на содержимом файла, создав круговую диаграмму (с процентом по каждой категории) для данные и сохранять как файлы jpg.

   //Read one file at a time from a directory 
       File folder = new File("C:\\MyDirectory"); 
       File[] listOfFiles = folder.listFiles(); 

      //initialize variables 

       String infile, infileDate; 
       double ratioCategoryA = 0; 
       double ratioCategoryB = 0; 
       double ratioCategoryC = 0; 

       infileDate = ""; 

      //read one line at a time 
       for (File file : listOfFiles) { 
       if (file.isFile()) { 

       infile = file.getName(); 
       //file name format - e.g., 08-09-2013.csv 
       //extract date from file name to display on piechart 
       int index = infile.indexOf("csv"); 
       infileDate = infile.substring(0, index-1); 

       try{ 

       FileReader onefile = new FileReader(folder + "\\" + 
           infile); 
       BufferedReader reader = new BufferedReader(onefile); 

       //initialize variables 
        String strLine; 
        int countCategoryA = 0; 
        int countCategoryB = 0; 
        int countCategoryC = 0; 


      while ((strLine = reader.readLine()) != null) { 

      //find category type in each line 
      if (strLine.contains("Category A")){ 
      countCategoryA = countCategoryA + 1;} 
      if (strLine.contains("Category B")){ 
      countCategoryB = countCategoryB + 1;} 
      if (strLine.contains("Category C")){ 
      countCategoryC = countCategoryC + 1;} 


     } 
     //calculate ratio for each event type 
      int sum = countCategoryA + countCategoryB + countCategoryC 
      ratioCategoryA = (countCategoryA/(double)sum) * 100.0; 
      ratioCategoryB = (countCategoryB/(double)sum) * 100.0; 
      ratioCategoryC = (countCategoryC/(double)sum) * 100.0; 

     onefile.close(); 
     } 
     catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
     } 

     } 

     // Create a simple pie chart 
     DefaultPieDataset pieDataset = new DefaultPieDataset(); 

     pieDataset.setValue("Category A", new Double(ratioCategoryA)); 
     pieDataset.setValue("Category B", new Double(ratioCategoryB)); 
     pieDataset.setValue("Category C", new Double(ratioCategoryC)); 

    JFreeChart chart = ChartFactory.createPieChart 
    ("Category Pie Chart " + infileDate, // Title 
    pieDataset, // Dataset 
    true, // Show legend 
    true, // Use tooltips 
    false // Configure chart to generate URLs? 
    ); 

    PiePlot plot = (PiePlot) chart.getPlot(); 

     plot.setBackgroundPaint(Color.white); 
     plot.setCircular(true); 

     //generate percentage on each category type on the pie chart 
     plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
      "{0} = {2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance() 
     )); 

     plot.setNoDataMessage("No data available"); 


    //save pie chart in jpg file 

    try { 
    ChartUtilities.saveChartAsJPEG(new File("C:\\chart" + infileDate + ".jpg"), chart, 500, 300); 
    } catch (Exception e) { 
    System.out.println("Problem occurred creating chart."); 
    } 
     } 
    } 
Смежные вопросы