jfreechart

jfreechart

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

基本介紹

  • 外文名:jfreechart
  • 套用平台:JAVA平台
  • 類別:開放的圖表繪製類庫
  • 產生:PNG和JPEG格式的輸出
簡介,評價,下載和配置,實例參考,

簡介

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 ChartAnyChartFusionCharts等。

下載和配置

下載官方地址:參考套用資料
解壓縮後,將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();
}
}

相關詞條

熱門詞條

聯絡我們