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圖表庫是一個100%免費的開源項目,使開發人員容易專業質量圖表顯示在他們的應用程序。
JFreeChart廣泛的特性包括:

一致的和證據確鑿的API,支持多種圖表類型;
一個靈活的設計,很容易擴展,和目標服務器端和客戶端應用程序;
支持多種輸出類型,包括Swing組件、圖像文件(包括PNG和JPEG)和矢量圖形文件格式(包括PDF、EPS和SVG);
JFreeChart是“開源”,或者更具體地說, 自由軟件 。 它是分佈式的條件下 GNU通用公共許可證 (LGPL),
它允許使用專有應用程序。

優點

穩定、輕量級且功能強大
免費開源,但是開發手冊和示例要花錢購買
API處理簡單,很容易上手
生成的圖表運行順暢
雖然JFreeChart的文檔要收費,但好在國內還有很多人在使用JFreeChart,網上可以找到很多相關的使用教程,可以參考。JFreeChart的缺陷就是隻適合生成圖片,而且文字、圖片都不是特別清晰,還需要進行一些調整,比較麻煩。在交互性方面它又比不上Flash圖表工具,比如Open Flash Chart、AnyChart、FusionCharts等。

使用樣例

(1)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();
}
}
}

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

(2)JFreeChart繪製折線圖

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, 2019), 45);
timeSeries.add(new Month(2, 2019), 46);
timeSeries.add(new Month(3, 2019), 1);
timeSeries.add(new Month(4, 2019), 500);
timeSeries.add(new Month(5, 2019), 43);
timeSeries.add(new Month(6, 2019), 324);
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);
}
}

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

JFreeChart繪製餅狀圖

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();
}
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章