JFreeChart餅圖


在餅圖中,每個磁區的弧長成正比它代表的數量。本章演示了如何使用JFreeChart 從一個給定的業務資料建立餅圖。

業務資料

下面的例子描述了移動銷售餅圖。以下是不同移動品牌和銷售(每天單位)列表。

S.N. 手機品牌 銷售(天)
1 Iphone 5S 20
2 Samsung Grand 20
3 MOTO G 40
4 Nokia Lumia 10

基於AWT 應用

以下是對從上述給定的資訊建立餅圖的程式碼。此程式碼可以幫助嵌入一個餅圖在任何AWT 應用程式。

import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
 
public class PieChart_AWT extends ApplicationFrame 
{
   public PieChart_AWT( String title ) 
   {
      super( title ); 
      setContentPane(createDemoPanel( ));
   }
   private static PieDataset createDataset( ) 
   {
      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue( "IPhone 5s" , new Double( 20 ) );  
      dataset.setValue( "SamSung Grand" , new Double( 20 ) );   
      dataset.setValue( "MotoG" , new Double( 40 ) );    
      dataset.setValue( "Nokia Lumia" , new Double( 10 ) );  
      return dataset;         
   }
   private static JFreeChart createChart( PieDataset dataset )
   {
      JFreeChart chart = ChartFactory.createPieChart(      
         "Mobile Sales",  // chart title 
         dataset,        // data    
         true,           // include legend   
         true, 
         false);

      return chart;
   }
   public static JPanel createDemoPanel( )
   {
      JFreeChart chart = createChart(createDataset( ) );  
      return new ChartPanel( chart ); 
   }
   public static void main( String[ ] args )
   {
      PieChart_AWT demo = new PieChart_AWT( "Mobile Sales" );  
      demo.setSize( 560 , 367 );    
      RefineryUtilities.centerFrameOnScreen( demo );    
      demo.setVisible( true ); 
   }
}

讓我們繼續上面PieChart_AWT.java檔案中的Java程式碼,然後從命令提示字元下編譯並執行它,如下所示:

$javac PieChart_AWT.java 
$java PieChart_AWT 

如果一切順利,它會編譯並執行生成以下餅圖:

JFreeChart Pie Chart

如果不需要在應用程式嵌入圖表中,那麼可以在命令提示字元下建立圖表的影象。 JFreeChart允許以JPG或PNG格式儲存圖表影象。

JPEG建立影象

讓我們重新寫上面的例子,生成命令列JPEG影象。以下是通過JFreeChart庫,按要求提供兩個API,用它來生成PNG或JPEG影象。

  • saveChartAsPNG() - API用來儲存影象為PNG格式。

  • saveChartAsJPEG() - API用來儲存影象JPEG格式。

import java.io.*;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart {
   public static void main( String[ ] args ) throws Exception
   {

      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue("IPhone 5s", new Double( 20 ) );
      dataset.setValue("SamSung Grand", new Double( 20 ) );
      dataset.setValue("MotoG", new Double( 40 ) );
      dataset.setValue("Nokia Lumia", new Double( 10 ) );

      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales", // chart title
         dataset, // data
         true, // include legend
         true,
         false);
         
      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */ 
      File pieChart = new File( "PieChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( pieChart , chart , width , height );
   }
}

保持PieChart.java檔案中如上面的Java程式碼,然後從命令提示字元下編譯並執行它,如下所示:

$javac PieChart.java 
$java PieChart 

如果一切順利,它會編譯並執行在當前的目錄中建立JPEG影象檔案為namedPieChart.jpeg。