JFreeChart入門簡介
經過三天的學習,現在對于JFreeChart有了一些了解,下面說一下什么是JFreeChart以及如何用JFreeChart創建簡單的圖形。
JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫。它完全使用JAVA語言編寫,是為applications, applets, servlets 以
及JSP等使用所設計。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點圖(scatter plots)、時序圖(time
- series)、甘特圖(Gantt charts)等等多種圖表,并且可以產生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關聯。
我們在建立報表時經常使用的圖形有餅狀圖,柱狀圖,線形圖,所以現在我將說明一下這些圖的畫法。
但是在畫圖之前,有一些問題是我們需要先知道的,下面我分為幾點來說:
不同的圖都有一個各自的數據集xxxDataset,這些數據集的作用是提供圖表呈現的數據,但是由于不同圖用到的數據集不
同,所以需要對各個圖表所呈現的數據內容有所了解,才能針對當前數據的結構選擇最好的圖表。
JFreeChart如果要建立出一個最簡單的圖形,需要經過三步:
建立數據集。
創建JFreeChart實例,這里可以有兩種方法建立,一種是通過xxxPlot獲取數據集然后將xxxPlot傳遞給JFreeChart的構
造方法,一種是通過ChartFactory通過數據集來創建一個JFreeChart實例。
如果是先獲取xxxPlot就不用這一步,如果是通過ChartFactory的話,則需要JFactory實例返回一個xxxPlot。
然后對plot進行相關操作,在這里可以改變圖形的顯示。
上面說的是最基本的,還有許多功能將在以后詳細描述。
下面的實例均是Java環境下直接運行的,目的在于專注于如何使用JFreeChart,現在我們來創建一個餅狀圖:
import java.awt.Font; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; /**
- A simple demonstration application showing how to create a pie chart using
- data from a {@link DefaultPieDataset}. */ public class PieChartDemo1 extends ApplicationFrame { /**
- Default constructor. *
- @param title the frame title. */ public PieChartDemo1(String title) { super(title); setContentPane(createDemoPanel()); } /**
- Creates a sample dataset. *
- @return A sample dataset. */{color:#808080} {color} //生成冰磚數據集 private static PieDataset createDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("One", new Double(43.2)); dataset.setValue("Two", new Double(10.0)); dataset.setValue("Three", new Double(27.5)); dataset.setValue("Four", new Double(17.5)); dataset.setValue("Five", new Double(11.0)); dataset.setValue("Six", new Double(19.4)); return dataset; }
/**
- Creates a chart. *
- @param dataset the dataset. *
- @return A chart. */ private static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart( "Pie Chart Demo 1", // 圖表標題 dataset, // 數據集 true, // 是否為一個圖例 true, //是否使用工具條,工具條就是將鼠標移動到圖表不同部分后,出現的一個小提示框 false //圖片是否有URL連接 ); //生成PiePlot PiePlot plot = (PiePlot) chart.getPlot(); plot.setSectionOutlinesVisible(false); //是否顯示分界線 plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12)); //Label的字體 plot.setNoDataMessage("No data available"); //如果沒有數據該如何顯示 plot.setCircular(false); //是否為正圓 plot.setLabelGap(0.02); //這個不太清楚,應該是設置橢圓內部的間距,如果改的很大的話圖形會變得很奇怪。。 plot.setForegroundAlpha(Float.parseFloat("0.4")); //圖片前景的透明度,圖片的前景就是這里的餅狀圖,透明度為0.0~1.0 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); //設置圖片是否顯示出百分比,0是數據,1是數值,2是百分比, //后面兩個參數是設置百分比取值到小數點幾位,這里取到小數點后兩位,如果百分比要設置為整數,就將這兩個參數去掉即可 plot.setToolTipGenerator(new StandardPieSectionLabelGenerator("{0}: ({1}M, {2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); //設置工具條是否顯示出百分比,其它同上 return chart;
}
/**
- Creates a panel for the demo (used by SuperDemo.java). *
- @return A panel. */ public static JPanel createDemoPanel() { JFreeChart chart = createChart(createDataset()); return new ChartPanel(chart); }
/**
- Starting point for the demonstration application. *
- @param args ignored. */ public static void main(String[] args) {
PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
} </pre>
由于現在自己只將餅狀圖實現過,為了能更清楚解釋其它圖的參數以及方法,關于柱狀圖和線形圖就等到之后再討論。
最后生成的圖表如下,其中的顯示出來的34%就是ToolLip的效果: