jfreechart

JFreeChart是JAVA平台上的一個開放的圖表繪製類庫。它完全使用JAVA語言編寫,是為applications, applets, servlets 以及JSP等使用所設計。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點圖(scatter plots)、時序圖(time series)、甘特圖(Gantt charts)等等多種圖表,並且可以產生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關聯。

簡介

JFreeChart截止2011年2月22日為止的相當不錯的java圖形解決方案,基本能夠解決目前的圖形方面的需求。

JFreeChart Java圖表庫是一個100%免費的開源項目,使開發人員容易專業質量圖表顯示在他們的應用程式。 JFreeChart廣泛的特性包括:

•一致的和證據確鑿的API,支持多種圖表類型;

•一個靈活的設計,很容易擴展,和目標伺服器端和客戶端應用程式;

•支持多種輸出類型,包括Swing組件、圖像檔案(包括PNG和JPEG)和矢量圖形檔案格式(包括PDF、EPS和SVG);

•JFreeChart是“開源”,或者更具體地說, 自由軟體 。 它是分散式的條件下 GNU通用公共許可證 (LGPL),它允許使用專有應用程式。

評價

•穩定、輕量級且功能強大

•免費開源,但是開發手冊和示例要花錢購買

•API處理簡單,很容易上手

•生成的圖表運行順暢

雖然JFreeChart的文檔要收費,但好在國內還有很多人在使用JFreeChart,網上可以找到很多相關的使用教程,可以參考。JFreeChart的缺陷就是只適合生成圖片,而且文字、圖片都不是特別清晰,還需要進行一些調整,比較麻煩。在互動性方面它又比不上Flash圖表工具,比如Open Flash Chart、AnyChart、FusionCharts等。

下載和配置

下載官方地址:參考套用資料

解壓縮後,將jfreechart-1.0.11.jar、jcommon-1.0.14.jar導入到套用中,就可以進行相關的開發。

最好下載1.0之前的版本,官方提供了demo。開發文檔需要收費的,所以還是在網上查閱相關資料

實例參考

jfreechart繪製柱狀圖

importjava.io.File;

importjava.io.IOException;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.DefaultCategoryDataset;

/*

* 繪製柱狀圖

* */

public class BarChart3DDemo

{

public static void main(String[] args)

{

try

{

//設定主題

ChartFactory.setChartTheme(Theme.getTheme());

//構造數據

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(100, "JAVA","1");

dataset.addValue(200, "js","1");

dataset.addValue(200, "C++", "2");

dataset.addValue(300, "C", "3");

dataset.addValue(400, "HTML", "4");

dataset.addValue(400, "CSS", "5");

/*

* public static JFreeChart createBarChart3D(

* java.lang.String title, 設定圖表的標題

* java.lang.String categoryAxisLabel, 設定分類軸的標示

* java.lang.String valueAxisLabel, 設定值軸的標示

* CategoryDataset dataset, 設定數據

* PlotOrientation orientation, 設定圖表的方向

* boolean legend, 設定是否顯示圖例

* boolean tooltips,設定是否生成熱點工具

* boolean urls) 設定是否顯示url

*/

JFreeChart chart = ChartFactory.createBarChart3D("程式語言統計", "語言",

"學習人數", dataset, PlotOrientation.VERTICAL, true, false,

false);

//保存圖表

ChartUtilities.saveChartAsPNG(new File("E:/chart/BarChart3D.png"), chart, 800, 500);

System.out.println("繪圖完成");

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

===================================================================================

//一條線 有點 有數

package Test;

import java.awt.Color;

import java.awt.Font;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartFrame;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.AxisSpace;

import org.jfree.chart.labels.ItemLabelAnchor;

import org.jfree.chart.labels.ItemLabelPosition;

import org.jfree.chart.labels.StandardXYItemLabelGenerator;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYItemRenderer;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.time.Month;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.ui.RectangleInsets;

import org.jfree.ui.TextAnchor;

public class try123 {

public static void main(String[] args){

//首先構造數據

TimeSeries timeSeries = new TimeSeries("BMI", Month.class);

// 時間曲線數據集合

TimeSeriesCollection lineDataset = new TimeSeriesCollection();

// 構造數據集合

timeSeries.add(new Month(1, 2009), 45);

timeSeries.add(new Month(2, 2009), 46);

timeSeries.add(new Month(3, 2009), 1);

timeSeries.add(new Month(4, 2009), 500);

timeSeries.add(new Month(5, 2009), 43);

timeSeries.add(new Month(6, 2009), 324);

timeSeries.add(new Month(7, 2009), 632);

timeSeries.add(new Month(8, 2009), 34);

timeSeries.add(new Month(9, 2009), 12);

timeSeries.add(new Month(10, 2009), 543);

timeSeries.add(new Month(11, 2009), 32);

timeSeries.add(new Month(12, 2009), 225);

lineDataset.addSeries(timeSeries);

JFreeChart chart = ChartFactory.createTimeSeriesChart("", "date", "bmi", lineDataset, true, true, true);

//增加標題

chart.setTitle(new TextTitle("XXXBMI指數", new Font("隸書", Font.ITALIC, 15)));

chart.setAntiAlias(true);

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

plot.setAxisOffset(new RectangleInsets(10,10,10,10));//圖片區與坐標軸的距離

plot.setOutlinePaint(Color.PINK);

plot.setInsets(new RectangleInsets(15,15,15,15));//坐標軸與最外延的距離

// plot.setOrientation(PlotOrientation.HORIZONTAL);//圖形的方向,包括坐標軸。

AxisSpace as = new AxisSpace();

as.setLeft(25);

as.setRight(25);

plot.setFixedRangeAxisSpace(as);

chart.setPadding(new RectangleInsets(5,5,5,5));

chart.setNotify(true);

// 設定曲線是否顯示數據點

XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();

xylineandshaperenderer.setBaseShapesVisible(true);

// 設定曲線顯示各數據點的值

XYItemRenderer xyitem = plot.getRenderer();

xyitem.setBaseItemLabelsVisible(true);

xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.INSIDE10, TextAnchor.BASELINE_LEFT));

xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());

xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));

plot.setRenderer(xyitem);

//顯示

ChartFrame frame = new ChartFrame("try1", chart);

frame.pack();

frame.setVisible(true);

}

}

===================================================================================

餅狀圖例子

import java.awt.Font;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartFrame;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.StandardChartTheme;

import org.jfree.data.general.DefaultPieDataset;

public class jFreeChartDemo3 {

public static void main(String[] args) {

StandardChartTheme sct = new StandardChartTheme("CN");

sct.setExtraLargeFont(new Font("隸書", Font.BOLD, 20));

sct.setRegularFont(new Font("隸書", Font.BOLD, 20));

sct.setLargeFont(new Font("隸書", Font.BOLD, 20));

DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue("蘋果", 100);

dataset.setValue("梨子", 200);

dataset.setValue("葡萄", 300);

dataset.setValue("香蕉", 400);

dataset.setValue("荔枝", 500);

ChartFactory.setChartTheme(sct);

JFreeChart jfreechart = ChartFactory.createPieChart3D("水果產量圖", dataset,

true, true, true);

ChartFrame frame = new ChartFrame("報表練習", jfreechart);

frame.setVisible(true);

frame.pack();

}

}

相關詞條

相關搜尋

熱門詞條

聯絡我們