亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java繪圖庫(kù)JFreeChart的使用教程

 更新時(shí)間:2023年09月21日 10:55:01   作者:QQVQQ...  
圖表是一種以簡(jiǎn)單方式顯示信息的圖形,JFreeChart允許創(chuàng)建各種交互式和非交互式圖表,本文主要介紹了Java繪圖庫(kù)JFreeChart的使用教程,感興趣的可以了解一下

前言

圖表是一種以簡(jiǎn)單方式顯示信息的圖形,通常使用直線和曲線來(lái)顯示金額。 JJFreeChart 由 David Gilbert 于 2000 年創(chuàng)立。如今,JFreeChart 是 Java 開發(fā)人員中使用最廣泛的圖表庫(kù)。

JFreeChart 允許創(chuàng)建各種交互式和非交互式圖表;可以廣泛地定制; 它允許修改圖表項(xiàng)目的顏色和繪制,圖例,線條或標(biāo)記的樣式。 它會(huì)自動(dòng)繪制軸刻度和圖例??梢詣?chuàng)建折線圖,條形圖,面積圖,散點(diǎn)圖,餅圖,甘特圖和各種專用圖,例如風(fēng)向圖或氣泡圖。它支持多種輸出格式,包括 PNG,JPEG,PDF 和 SVG。

相關(guān)jar包:JFreeChart繪圖包

類級(jí)結(jié)構(gòu)構(gòu)解釋了庫(kù)中的各種類如何相互交互以創(chuàng)建各種類型的圖表。下圖為JFreeChart的類級(jí)結(jié)構(gòu):

Units Description
File具有用戶輸入的源,用于在文件中創(chuàng)建數(shù)據(jù)集。
Database具有用戶輸入的源,用于在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)集。
Create Dataset接受數(shù)據(jù)集并將數(shù)據(jù)集存儲(chǔ)到數(shù)據(jù)集對(duì)象中。
General Dataset這種類型的數(shù)據(jù)集主要用于餅圖。
Category Dataset此類數(shù)據(jù)集用于條形圖、折線圖等。
Series Dataset這種類型的數(shù)據(jù)集用于存儲(chǔ)一系列數(shù)據(jù)和構(gòu)建折線圖。
Series Collection Dataset將不同類別的系列數(shù)據(jù)集添加到系列集合數(shù)據(jù)集中。這種類型的數(shù)據(jù)集用于 XY 線圖。
Create Chart這是為創(chuàng)建最終圖表而執(zhí)行的方法。
Frame/Image該圖顯示在一個(gè)Swing框架或創(chuàng)建映像。

一、快速繪圖教程

1. 折線圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(15, "schools", "1970");
		dataset.addValue(30, "schools", "1980");
		dataset.addValue(60, "schools", "1990");
		dataset.addValue(120, "schools", "2000");
		dataset.addValue(240, "schools", "2010");
		dataset.addValue(300, "schools", "2020");
		dataset.addValue(320, "schools", "2022");
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createLineChart(
				"Example", // 圖標(biāo)題
				"Year", // x軸標(biāo)題
				"Schools Count", // y軸標(biāo)題
				dataset, //數(shù)據(jù)集
				PlotOrientation.VERTICAL, //圖表方向
				false, true, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

2. 條形圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(1.0, "A", "Ⅰ");
		dataset.addValue(3.0, "A", "Ⅱ");
		dataset.addValue(5.0, "A", "Ⅲ");
		dataset.addValue(5.0, "A", "Ⅳ");
		dataset.addValue(5.0, "B", "Ⅰ");
		dataset.addValue(6.0, "B", "Ⅱ");
		dataset.addValue(10.0, "B", "Ⅲ");
		dataset.addValue(4.0, "B", "Ⅳ");
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createBarChart(
				"Example", // 圖標(biāo)題
				"Category",            
		         "Score",            
		         dataset,          
		         PlotOrientation.VERTICAL,           
		         true, true, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(1.0, "A", "Ⅰ");
		dataset.addValue(3.0, "A", "Ⅱ");
		dataset.addValue(5.0, "A", "Ⅲ");
		dataset.addValue(5.0, "A", "Ⅳ");
		dataset.addValue(5.0, "B", "Ⅰ");
		dataset.addValue(6.0, "B", "Ⅱ");
		dataset.addValue(10.0, "B", "Ⅲ");
		dataset.addValue(4.0, "B", "Ⅳ");
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createBarChart3D(
				"Example", // 圖標(biāo)題
				"Category", 
				"Score", 
				dataset, 
				PlotOrientation.VERTICAL, 
				true, true, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

3. 餅狀圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("A", 20);
		dataset.setValue("B", 10);
		dataset.setValue("C", 40);
		dataset.setValue("D", 30);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createPieChart(
				"Example", // 圖標(biāo)題
				dataset, // 數(shù)據(jù)集
				false, true, true);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("A", 20);
		dataset.setValue("B", 10);
		dataset.setValue("C", 40);
		dataset.setValue("D", 30);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createPieChart3D(
				"Example", // 圖標(biāo)題
				dataset, // 數(shù)據(jù)集
				false, true, true);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

4. XY圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Example {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		XYSeries data = new XYSeries("InternetExplorer");
		data.add(1.0, 1.0);
		data.add(2.0, 2.0);
		data.add(3.0, 3.0);
		data.add(4.0, 2.0);
		data.add(5.0, 1.0);
		data.add(6.0, 2.0);
		data.add(6.0, 3.0);
		data.add(7.0, 2.0);
		data.add(8.0, 1.0);
		data.add(9.0, 2.0);
		XYSeriesCollection dataset = new XYSeriesCollection();
		dataset.addSeries(data);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createXYLineChart(
				"Example", 
				"X", 
				"Y", 
				dataset, 
				PlotOrientation.VERTICAL, 
				false,true, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

5. 散點(diǎn)圖

package plot;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Example {
	public static void main(String[] args) throws IOException {
		// 添加數(shù)據(jù)
		XYSeriesCollection dataset = new XYSeriesCollection();
		XYSeries series1 = new XYSeries("Series1");
		for (int i = 0; i < 100; i++) {
			series1.add(Math.random()*100, Math.random()*100);
		}
		dataset.addSeries(series1);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createScatterPlot(
		        "Example", 
		        "X-Axis", "Y-Axis", dataset);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

6. 氣泡圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultXYZDataset;
public class ShowExample {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		DefaultXYZDataset dataset = new DefaultXYZDataset();
		double x[] = { 30, 40, 50, 60, 70, 80 };
		double y[] = { 10, 20, 30, 40, 50, 60 };
		double z[] = { 1, 2, 3, 4, 2, 1 };
		double xyz[][] = { x, y, z };
		dataset.addSeries("Series", xyz);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createBubbleChart(
		         "AGE vs WEIGHT vs WORK", 
		         "Weight", 
		         "AGE", 
		         dataset, 
		         PlotOrientation.HORIZONTAL, 
		         true, true, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

7. 時(shí)序圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
public class ShowExample {
	public static void main(String[] args) {
		// 創(chuàng)建數(shù)據(jù)
		TimeSeries series = new TimeSeries("Random Data");
		Second current = new Second();
		double value = 100.0;
		for (int i = 0; i < 4000; i++) {
			try {
				value = value + Math.random() - 0.5;
				series.add(current, value);
				current = (Second) current.next();
			} catch (SeriesException e) {
				System.err.println("Error adding to series");
			}
		}
		XYDataset dataset = (XYDataset) new TimeSeriesCollection(series);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createTimeSeriesChart(
				"Computing Test", 
				"Seconds", 
				"Value", 
				dataset, 
				false,false, false);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

二、常見類與方法

在本章中,我們將討論一些在JFreeChart庫(kù)重要的軟件包,類和方法。這些軟件包,類和方法是最常見的,同時(shí)建立了各種使用JFreeChart庫(kù)圖表。

1. ChartFactory 類

ChartFactory是org.jfree.chart包中抽象類。它提供了實(shí)用方法的集合,用于生成標(biāo)準(zhǔn)的圖表。以下是幾個(gè)重要方法的列表:

類構(gòu)造方法

方法描述
ChartFactory() ChartFactory類的默認(rèn)構(gòu)造函數(shù)。

類方法

S.N.方法 & 描述
1createPieChart(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls) 此方法使用默認(rèn)設(shè)置創(chuàng)建一個(gè)餅圖。它返回JFreeChart類型的對(duì)象。
2createPieChart3D(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls) 此方法使用指定的數(shù)據(jù)集三維/3D餅圖。
3createBarChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 參數(shù)java.lang.String categoryAxisLabel標(biāo)簽放置在X軸的值。該參數(shù)的java.lang.String valueAxisLabel標(biāo)簽放置在Y軸的數(shù)值。此方法創(chuàng)建一個(gè)條形圖。
4createBarChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法創(chuàng)建一個(gè)柱形圖具有3D效果。它返回JFreeChart類型的對(duì)象。
5createLineChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)

此方法使用默認(rèn)設(shè)置創(chuàng)建一個(gè)折線圖。

6createLineChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法創(chuàng)建一個(gè)折線圖與3D效果。
7createXYLineChart(java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, XYDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法使用默認(rèn)設(shè)置創(chuàng)建基于XYDataset的折線圖。

2. ChartFrame 類

ChartFrame類在org.jfree.chart包中,提供所有的幀相關(guān)的功能和工具。 ChartFrame類繼承自父類,如Frame, Window, Container, Component 類功能。

類構(gòu)造方法

S.N.構(gòu)造方法及描述
1ChartFrame (java.lang.Frame String, JfreeChart chart) 它構(gòu)建一個(gè)框架/frame。
2Chart Frame (java.lang.Frame String, JfreeChart chart, boolean scrollpane) 它構(gòu)建一個(gè)框架/frame。

類方法

S.N.構(gòu)造方法及描述
1getChartPanel() 此方法返回圖表面板的框架/frame。

3. ChartPanel 類

org.jfree.chart包中的ChartPanel類用于swing GUI部件,用于顯示JfreeChart對(duì)象。

類構(gòu)造方法

S.N.構(gòu)造方法及描述
1ChartPanel(JFreeChart chart) 此構(gòu)造一個(gè)面板/panel ,顯示指定的圖表。
2ChartPanel(JFreeChart chart, boolean useBuffer) 這個(gè)構(gòu)造函數(shù)構(gòu)造包含圖表的面板/panel。
3ChartPanel(JFreeChart chart, boolean properties, boolean save, boolean print, boolean zoom, boolean tooltips) 此構(gòu)造一個(gè)JFreeChart面板。

類方法

S.N.方法及描述
1setPreferredSize(java.awt.Dimension) 該方法用于java.awt中設(shè)置的幀大小。 Dimension類對(duì)象作為參數(shù)。這個(gè)方法是從javax.swing.JComponent中實(shí)現(xiàn)。

4. ChartUtilities 類

org.jfree.chart包中的CharUtilites類提供JFreeCharts包括將圖表轉(zhuǎn)換成圖像文件格式,如PNG,JPEG和創(chuàng)建HTML圖像映射方法的實(shí)用方法的集合。

類構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1ChartUtilities() 這是類的一個(gè)默認(rèn)構(gòu)造函數(shù)

類方法

S.N.方法及描述
1saveChartAsPNG(java.io.File file, JfreeChart chart, int width, int height) 此方法轉(zhuǎn)換和保存圖表為PNG格式指定的文件。
2saveChartAsJPEG(java.io.File file, JfreeChart chart, int width, int height) 此方法轉(zhuǎn)換并保存一個(gè)圖表,以JPEG格式指定的文件。

5. JFreeChart 類

JFreeChart 類是在org.jfree.chart包的核心類。這個(gè)類提供了JFreeChart的方法來(lái)創(chuàng)建柱狀圖,折線圖,餅圖和XY坐標(biāo)圖,包括時(shí)間序列數(shù)據(jù)。

類構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1JfreeChart(Plot plot) 此構(gòu)造函數(shù)創(chuàng)建基于所提供的節(jié)點(diǎn)一個(gè)新的圖表。
2JfreeChart(java.lang.String title, java.awt.Font titleFont, Plot plot, boolean createLegend) 該構(gòu)造函數(shù)創(chuàng)建一個(gè)新的圖表給定標(biāo)題和繪圖。
3JfreeChart(java.lang.String title, Plot plot) 該構(gòu)造函數(shù)創(chuàng)建一個(gè)新的圖表給定標(biāo)題和繪圖。

類方法

S.N.方法及描述
1getXYPlot() 此方法返回節(jié)點(diǎn)圖表作為XYPlot。使用XYPolt我們可以XY圖表做了一些實(shí)用操作。

6. PiePlot 類

這個(gè)類是org.jfree.chart.plot包的一部分,來(lái)自同一個(gè)包擴(kuò)展Plot 類。這個(gè)類提供了一些方法來(lái)創(chuàng)建餅圖塊。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1PiePlot() 它創(chuàng)建了一個(gè)新的繪圖。
2PiePlot(PieDataset dataset) 它創(chuàng)建了一個(gè)繪圖,餅圖由指定的數(shù)據(jù)集。

類方法

S.N.方法及描述
1setStartAngle(double angle) 此方法設(shè)置起始角度和發(fā)送PlotChangeEvent向所有注冊(cè)的偵聽器

7. PiePlot3D 類

PiePlot3D類和PiePlot類在同一個(gè)包中的子類。因此,這兩個(gè)類有相同的功能,PiePlot類只不過(guò)是用于創(chuàng)建3D圖形。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1PiePlot3D() 此構(gòu)造函數(shù)創(chuàng)建沒(méi)有數(shù)據(jù)集的新實(shí)例。
2PiePlot3D(PieDataset dataset) 該構(gòu)造函數(shù)創(chuàng)建一個(gè)餅圖和使用指定的數(shù)據(jù)集三維效果。

類方法

S.N.方法及描述
1setForegroundAlpha(float alpha) 它設(shè)置alpha透明度并向所有發(fā)送PlotChangeEvent注冊(cè)的偵聽器。
2setInteriorGap(double percent) 它設(shè)置了內(nèi)部差距并發(fā)送PlotChangeEvent向所有注冊(cè)的偵聽器。這種控制的餅圖繪圖邊緣與繪圖區(qū)本身(即,其中部分標(biāo)簽顯示的區(qū)域)之間的空間。這個(gè)方法是從父類PiePlot繼承。

8. PlotOrientation 類

這是一個(gè)串行化類從org.jfree.chart.plot封裝,它是用來(lái)顯示一個(gè)二維曲線圖的方位。方向可以是垂直的或水平的。它設(shè)置Y軸的方向。傳統(tǒng)的繪圖有一個(gè)垂直的Y軸。

字段摘要

S.N.類型字段 & 描述
1PlotOrientationHORIZONTAL 為一個(gè)曲線圖,其中所述范圍軸(Y軸)是水平。
2PlotOrientationVERTICAL 為一個(gè)曲線圖,其中所述范圍軸(Y軸)是垂直的。這個(gè)默認(rèn)的方向。

類方法

S.N.方法及描述
1isHorizontal() 如果這個(gè)方向是水平的,此方法返回true,否則返回false。
2isVertical() 如果這個(gè)方向是VERTICAL,此方法返回true,否則返回false。

9. XYPlot 類

這在org.jfree.chart.plot包可用一個(gè)通用類,并將其用于在(X,Y)對(duì)的形式標(biāo)繪數(shù)據(jù)。這個(gè)曲線圖可以從實(shí)現(xiàn)XYDataSet接口的任何其它類中使用的數(shù)據(jù)。 XYPlot利用一個(gè)XYItemRenderer的畫在圖上的每個(gè)點(diǎn)。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1XYPlot() 該構(gòu)造器沒(méi)有數(shù)據(jù)集,無(wú)軸,無(wú)渲染器創(chuàng)建一個(gè)新的XYPlot實(shí)例。
2XYPlot(XYDataset dataset,ValueAxis domainAxis,ValueAxis rangeAxis,XYItemRenderer renderer),此構(gòu)造函數(shù)創(chuàng)建一個(gè)新的繪圖并指定數(shù)據(jù)集,軸和渲染。

類方法

S.N.方法及描述
1setRenderer(XYItemRenderer renderer) 此方法設(shè)置渲染器的主要數(shù)據(jù)集,并發(fā)送更改事件向所有注冊(cè)的偵聽器。

10. NumberAxis 類

這個(gè)類是org.jfree.chart.axis封裝,它可以訪問(wèn)任意軸的數(shù)值數(shù)據(jù)。當(dāng)我們?cè)O(shè)置任何軸的范圍為默認(rèn)值,它根據(jù)所述數(shù)據(jù)的范圍配合。但使用NumberAxis,類我們可以設(shè)置較低的利潤(rùn)率和定義域和值域軸的上側(cè)邊距。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1NumberAxis( ) 這是NumberAxis一個(gè)默認(rèn)的構(gòu)造函數(shù)。
2NumberAxis( java.lang.String label) 構(gòu)造函數(shù)NumberAxis使用必要的默認(rèn)值在哪里。

類方法

S.N.方法及描述
1setLowerMargin(double margin) 它為軸心的利潤(rùn)率較低(為軸心范圍的百分比),并發(fā)送一個(gè)AxisChangeEvent所有已注冊(cè)的偵聽器。這個(gè)方法是從父類ValueAxis繼承。
2setUpperMargin(double margin) 它設(shè)置于所述軸的上緣(視軸范圍的百分比),并發(fā)送一個(gè)AxisChangeEvent給所有注冊(cè)的監(jiān)聽器。這種方法也存在于ValueAxis類。

11. XYLineAndShapeRenderer 類

這是在org.jfree.chart.renderer.xy包下的類,它需要連接數(shù)據(jù)點(diǎn)與線,并繪制形狀,在每個(gè)數(shù)據(jù)點(diǎn)下是可用的。這個(gè)渲染器類是專為XYPlot類配合使用。

類的構(gòu)造函數(shù)

S.N.構(gòu)造和描述
1XYLineAndShapeRenderer() 它創(chuàng)建了一個(gè)新的渲染器有兩種線條和形狀可見。
2XYLineAndShapeRenderer (boolean lines, boolean shapes) 它創(chuàng)建了一個(gè)新的渲染與特定的屬性。

類方法

S.N.方法及描述
1setSeriesPaint(int series, java.awt.Paint paint) 此方法設(shè)置用于一系列的涂料,并發(fā)送RendererChangeEvent給所有注冊(cè)的監(jiān)聽器。這個(gè)方法是從AbstratRenderer抽象類從渲染器包中JFreeChart的API。
2setSeriesStroke(int series, java.awt.Stroke stroke) 此方法設(shè)置用于一系列的流程,并發(fā)送RendererChangeEvent向所有注冊(cè)的偵聽器。這個(gè)方法是從AbstratRenderer抽象類,它是這個(gè)包的超類。

12. XYItemRenderer通用數(shù)據(jù)集

這是用于使一個(gè)單一的(X,Y)格式項(xiàng)在XYPlot接口。org.Jfree.data.general包其具有類和接口,以定義不同類型的數(shù)據(jù)集來(lái)構(gòu)造圖。

PieDataset

這是作為一個(gè)通用的數(shù)據(jù)集,其中值與鍵相關(guān)聯(lián)的接口。正如其名稱所暗示的,可以使用這個(gè)數(shù)據(jù)集提供數(shù)據(jù)的餅圖。此接口擴(kuò)展KeyedValues數(shù)據(jù)集的接口。所有使用此接口的方法取自KeyedValues,Values和數(shù)據(jù)集的接口。

13. DefaultPieDataset 類

這是一個(gè)默認(rèn)的實(shí)現(xiàn)類PieDataset接口。

類的構(gòu)造函數(shù)

S.N.構(gòu)造函數(shù)和描述
1DefaultPieDataset() 該構(gòu)造函數(shù)創(chuàng)建一個(gè)新的數(shù)據(jù)集,初始為空。
2DefaultPieDataset(KeyedValues data) 它從一個(gè)KeyedValues實(shí)例復(fù)制數(shù)據(jù)創(chuàng)建了一個(gè)新的數(shù)據(jù)集。

類方法

S.N.方法及描述
1setValue(java.lang.Comparable key, double value) 它設(shè)置數(shù)據(jù)值的鍵,發(fā)送DatasetChangeEvent向所有注冊(cè)的偵聽器。
2setValue(java.lang.Comparable key, java.lang.Number value) 它設(shè)置數(shù)據(jù)值的鍵,發(fā)送DatasetChangeEvent向所有注冊(cè)的偵聽器。

14. SeriesException 類

這是一個(gè)異常類。它會(huì)引發(fā)發(fā)生在時(shí)間序列中數(shù)據(jù)集的數(shù)據(jù)的異常。異常是引發(fā)上的重復(fù)或無(wú)效數(shù)據(jù)的次數(shù)。時(shí)間序列不能與重復(fù)應(yīng)用,格式必須是有效的。

15. DefaultCategoryDataset

這是一個(gè)默認(rèn)的實(shí)現(xiàn)類CategoryDataset接口。

類的構(gòu)造函數(shù)

S.N.構(gòu)造函數(shù)及描述
1DefaultCategoryDataset() 此構(gòu)造函數(shù)創(chuàng)建新的空數(shù)據(jù)集。

類方法

S.N.方法及描述
1addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 這種方法增加了一個(gè)值,以使用可比的鍵表。
2addValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 這種方法增加了一個(gè)值的表。
3setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 此方法添加或在表中更新的值,并發(fā)送aDatasetChangeEvent給所有注冊(cè)的監(jiān)聽器。
4setValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 此方法添加或在表中更新的值,并發(fā)送DatasetChangeEvent給所有注冊(cè)的監(jiān)聽器。

參見JFreeChart的API,用于各種其他方法和字段的詳細(xì)信息。

16. 序列數(shù)據(jù)集

系列數(shù)據(jù)集用于XY圖表。該軟件包是org.Jfree.data.xy,其中包含類和屬于XY圖表接口。核心接口是XYDataset。

XYDataset

這是通過(guò)該數(shù)據(jù)中的(X,Y)的項(xiàng)目的形式可被訪問(wèn)的接口。正如其名稱所提示的,可以使用這個(gè)數(shù)據(jù)集服務(wù)XY圖表。一些在這個(gè)接口中的方法都取自SeriesDateset接口。

XYZDataset

這是通過(guò)該數(shù)據(jù)的形式(x,y,z)的項(xiàng)目可被訪問(wèn)的接口。正如其名稱所暗示的,可以使用這個(gè)數(shù)據(jù)集服務(wù)XYZ圖。一些在這個(gè)接口中的方法都取自SeriesDateset。

XYSeries

這是一類,它代表了在所述形式的零個(gè)或多個(gè)數(shù)據(jù)項(xiàng)(x,y)的序列。默認(rèn)情況下,該系列中的數(shù)據(jù)項(xiàng)都按升序排列由x值,并重復(fù)允許的x值。無(wú)論是排序和復(fù)制缺省值可以在構(gòu)造函數(shù)中被改變。 Y值可以表示為空值代表缺失值。

類構(gòu)造函數(shù)

S.N.構(gòu)造函數(shù)描述
1XYSeries(java.lang.Comparable key) 該構(gòu)造函數(shù)創(chuàng)建一個(gè)新的空系列。
2XYSeries(java.lang.Comparable key, boolean autoSort) 它構(gòu)造一個(gè)新的空系列,具有自動(dòng)排序標(biāo)志集的請(qǐng)求,并且重復(fù)的值是允許的。
3XYSeries(java.lang.Comparable key, boolean autoSort, boolean allowDuplicateXValues) 它構(gòu)造一個(gè)新的xy系列不包含任何數(shù)據(jù)。

類方法

S.N.方法描述
1add(double x, double y) 這種方法增加了數(shù)據(jù)項(xiàng)成系列。

在上述方法中使用的教程例子。如果想了解其余的方法和字段,請(qǐng)參考JFreeChart的API。

XYSeriesCollection

XYSeriesCollection類有類似父類AbstractIntervelDataset,AbstractXYDatset,AbstractSeriesDataset和AbstractDataset。一些在這個(gè)類中的方法屬于這個(gè)類的父類。

類的構(gòu)造函數(shù)

S.N.構(gòu)造函數(shù)描述
1XYSeriesCollection() 它構(gòu)造一個(gè)空的數(shù)據(jù)集。
2XYSeriesCollection(XYSeries xyseries)它構(gòu)建了一個(gè)數(shù)據(jù)集,并用一個(gè)系列的填充。

類方法

S.N.方法及描述
1addSeries(XYSeries series) 這種方法增加了一系列的收集和發(fā)送DatasetChangeEvent向所有注冊(cè)的偵聽器。

參見JFreeChart的API其余的方法和字段。

Default XYZDataset :

DefaultXYZDataset類都有父類,如AbstractIntervelDataset,AbstractXYDatset,AbstractSeriesDataset,AbstractDataset和AbstractXYZDataset。一些在這個(gè)類中的方法屬于這一類的父類。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1DefaultXYZDataset() 它構(gòu)造一個(gè)空的數(shù)據(jù)集。

類方法

S.N.方法及描述
1addSeries(java.lang.Comparable seriesKey, double[ ][ ] data ) 該方法增加了一系列的收集和發(fā)送DatasetChangeEvent向所有注冊(cè)的偵聽器。

請(qǐng)參考JFreeChart的API,其余的方法和字段。

JFreeCharts的時(shí)間序列

該軟件包是org.jfree.data.time。該軟件包包含用于時(shí)間相關(guān)的數(shù)據(jù)的類和接口。

TimeSeries :

此類表示數(shù)據(jù)項(xiàng)的期值的形式,其中一段是RegularTimePeriod抽象類,如時(shí)間,日,小時(shí),分鐘和秒類的一些實(shí)例序列。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1TimeSeries(java.lang.Comparable name) 它創(chuàng)建新的空系列。
2TimeSeries(java.lang.Comarable name, java.lang.String domain, java.lang.Strin range) 它會(huì)創(chuàng)建一個(gè)不包含任何數(shù)據(jù)的新的時(shí)間序列。

類方法

S.N.方法及描述
1add(RegularTimePeriod period,double value) 該方法增加了一個(gè)新的數(shù)據(jù)項(xiàng)用以串聯(lián)。

其余的方法和字段參見JFreeChart的API。

TimeSeriesCollection :

這是作為時(shí)間序列的對(duì)象的集合的類。這個(gè)類實(shí)現(xiàn)了XYDataset接口,以及它擴(kuò)展了IntervelXYDataset接口。這使得它可以方便地收集序列數(shù)據(jù)對(duì)象。

類的構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1TimeSeriesCollection() 它構(gòu)造一個(gè)空的數(shù)據(jù)集,綁在默認(rèn)時(shí)區(qū)。
2TimeSeriesCollection(TimeSeries series) 它構(gòu)造一個(gè)包含單個(gè)系列(更多可添加),綁在默認(rèn)時(shí)區(qū)的數(shù)據(jù)集。
3TimeSeriesCollection(TimeSeries series, java.util.TimeZone zone) 它構(gòu)造包含單個(gè)系列(更可添加),綁定到特定的時(shí)間段的數(shù)據(jù)集。
4TimeSeriesCollection(java.util.TimeZone zone) 它構(gòu)造一個(gè)空的數(shù)據(jù)集時(shí),綁定到特定的時(shí)間區(qū)。

類方法

S.N.方法及描述
1addSeries(TimeSeries series) 方法增加了一系列的收集和發(fā)送DatasetChangeEvent向所有注冊(cè)的偵聽器。

其余的方法和字段請(qǐng)參考JFreeChart的API。

Second 類:

這個(gè)類表示一個(gè)特定的日子一秒鐘。這個(gè)類是不可變的,這是對(duì)所有RegularTimePeriod子類的要求。

類的構(gòu)造函數(shù)

S.N.構(gòu)造函數(shù)及描述
1Second() 它構(gòu)造一個(gè)新的Second,基于系統(tǒng)的日期/時(shí)間。
2Second(java.util.Date time) 它構(gòu)造從指定日期/時(shí)間和默認(rèn)時(shí)區(qū)的新實(shí)例。
3Second(java.util.Date time, java.util.TimeZone zone, java.util.Locale locale) 它創(chuàng)建基于所提供的時(shí)間和時(shí)區(qū)的新的Second對(duì)象。
4Second(int second, int minute, int hour, int day, int month, int year)它創(chuàng)建了一個(gè)新的Second對(duì)象。
5Second(int second, Minute minute) 它構(gòu)建了一個(gè)新的Second。

類方法

S.N.方法及描述
1getSecond() 它返回分鐘和秒。
2next() 它返回當(dāng)前的下一秒。

其余的方法和字段請(qǐng)參考JFreeChart的API。

JFreeCharts 中的幀:

該軟件包是org.jfree.ui。這是包所屬JFreeChart的JCommons的API。它包含用于創(chuàng)建預(yù)配置的圖表框架的實(shí)用程序類。

ApplicationFrame :

這是用于創(chuàng)建簡(jiǎn)單的應(yīng)用程序的主框架的基類。幀監(jiān)聽窗口關(guān)閉事件,并作出反應(yīng),關(guān)閉JVM。這是很好的小型演示應(yīng)用。對(duì)于企業(yè)應(yīng)用程序,需要使用一些更穩(wěn)健的東西。在這個(gè)類中的主要核心方法取自Component, Container, Window, Frame 和Jframe類。

類構(gòu)造函數(shù)

S.N.構(gòu)造方法及描述
1ApplicationFrame(java.lang.String title) 它會(huì)創(chuàng)建一個(gè)字符串標(biāo)題的應(yīng)用程序框架。

這個(gè)類有助于創(chuàng)建AWT框架。這就是為什么我們使用這個(gè)類作為父類在本教程中的例子的原因。

其采取父類的方法用于打開一個(gè)框架,關(guān)閉一個(gè)框架,改變大小,改變背景或前景顏色和監(jiān)聽器。

RefineryUtilities :

這是關(guān)于用戶界面的工具方法的類的集合。

類方法

S.N.方法及描述
1centerFrameOnScreen(java.awt.Window frame) 它定位在屏幕的中間的指定幀。

在上述方法中使用的教程例子以外的類,方法和字段參見JFreeChart的API。

三、高級(jí)用法

1. 圖形的展示與保存

package plot;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
public class Example {
	public static void main(String[] args) throws IOException {
		// 創(chuàng)建數(shù)據(jù)
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	    dataset.addValue( 15 , "schools" , "1970" );
	    dataset.addValue( 30 , "schools" , "1980" );
	    dataset.addValue( 60 , "schools" , "1990" );
	    dataset.addValue( 120 , "schools" , "2000" );
	    dataset.addValue( 240 , "schools" , "2010" ); 
	    dataset.addValue( 300 , "schools" , "2014" );
	    // 創(chuàng)建JFreeChart對(duì)象
	    JFreeChart chart = ChartFactory.createLineChart(
	         "Example",  // 圖標(biāo)題
	         "Year",  // x軸
	         "Schools Count",// y軸
	         dataset,
	         PlotOrientation.VERTICAL,
	         false,true,false);
	    // 保存到本地(PNG或者JPEG格式)
	    File f = new File( "chart.png" ); 
	    ChartUtilities.saveChartAsPNG(f ,chart, 800 ,400);
        // 保存為矢量圖形(需要借助JFreeSVG包)
        SVGGraphics2D g2 = new SVGGraphics2D(640, 480);
        chart.draw(g2, new Rectangle(640, 480));
        File f = new File("SVGBarChartDemo.svg");
        SVGUtils.writeToSVG(f, g2.getSVGElement());
	    // 利用swing進(jìn)行展示
	    JPanel jPanel = new ChartPanel(chart);
        JFrame frame = new JFrame("JFreechart Test");
        frame.add(jPanel);
        frame.setBounds(0, 0, 800, 500);
        frame.setVisible(true);
        // 利用awt進(jìn)行顯示
        ChartFrame chartFrame = new ChartFrame("Test", chart);
        chartFrame.pack();
        chartFrame.setVisible(true);      
	}
}

2. 通用設(shè)置

package plot;
import java.awt.BasicStroke;
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.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleEdge;
public class Test {
	public static void main(String[] args) {
		// 添加數(shù)據(jù)集
        DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
        dataSet.addValue(3542, "2020年", "第一季度");// Y軸-圖例-X軸
        dataSet.addValue(3692, "2020年", "第二季度");// Y軸-圖例-X軸
        dataSet.addValue(8542, "2020年", "第三季度");// Y軸-圖例-X軸
        dataSet.addValue(5742, "2020年", "第四季度");// Y軸-圖例-X軸
        dataSet.addValue(1242, "2021年", "第一季度");// Y軸-圖例-X軸
        dataSet.addValue(2612, "2021年", "第二季度");// Y軸-圖例-X軸
        dataSet.addValue(1942, "2021年", "第三季度");// Y軸-圖例-X軸
        dataSet.addValue(4612, "2021年", "第四季度");// Y軸-圖例-X軸
        // 主題樣式設(shè)置
        StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); // 創(chuàng)建主題樣式
        standardChartTheme.setExtraLargeFont(new Font("宋體", Font.BOLD, 64)); // 設(shè)置標(biāo)題字體
        standardChartTheme.setRegularFont(new Font("宋體", Font.BOLD, 32)); // 設(shè)置圖例的字體
        standardChartTheme.setLargeFont(new Font("宋體", Font.BOLD, 20)); // 設(shè)置軸向的字體
        standardChartTheme.setChartBackgroundPaint(Color.WHITE);// 設(shè)置主題背景色
        ChartFactory.setChartTheme(standardChartTheme);// 應(yīng)用主題樣式
        // 定義圖表對(duì)象
        JFreeChart chart = ChartFactory.createLineChart(
        		// 圖表的標(biāo)題-橫軸標(biāo)題-縱軸標(biāo)題-數(shù)據(jù)集
        		"JFreeChart折線圖", "銷售額", "季度", dataSet, 
        		// 圖表方向-圖例-工具提示-超鏈接
        		PlotOrientation.VERTICAL,true, false, false);
        // chart.setTitle(new TextTitle(title[0], new Font("宋書", Font.BOLD, 64)));// 重新設(shè)置標(biāo)題
        // chart.removeLegend();// 是否移除圖例
        CategoryPlot plot = (CategoryPlot)chart.getPlot(); // 獲得圖表顯示對(duì)象
        plot.setOutlineVisible(false);// 是否顯示外邊框
        plot.setOutlinePaint(Color.WHITE);// 外邊框顏色
        // plot.setOutlineStroke(new BasicStroke(2.f));// 外邊框框線粗細(xì)
        plot.setBackgroundPaint(Color.WHITE);// 白色背景
        plot.setNoDataMessage("無(wú)圖表數(shù)據(jù)");// 無(wú)數(shù)據(jù)提示
        plot.setNoDataMessageFont(new Font("宋體", Font.BOLD, 32));// 提示字體
        plot.setNoDataMessagePaint(Color.RED);// 提示字體顏色
        // 圖例
        LegendTitle legend = chart.getLegend();// 圖例對(duì)象
        legend.setPosition(RectangleEdge.BOTTOM);// 圖例所在位置(上、下、左、右)
        legend.setVisible(true);// 是否顯示圖例
        legend.setBorder(2, 0, 0, 2); // 圖例上下左右邊框粗細(xì)
        legend.setItemFont(new Font("宋體", Font.BOLD, 32));// 圖例大小
        // 網(wǎng)格線
        plot.setDomainGridlinePaint(Color.BLUE);
        plot.setDomainGridlinesVisible(true);// 豎線
        plot.setRangeGridlinePaint(Color.BLACK);
        plot.setRangeGridlinesVisible(true);// 橫線
        // 橫坐標(biāo)
        CategoryAxis xAxis = plot.getDomainAxis();
        xAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 25));// 設(shè)置X軸值字體
        xAxis.setLabelFont(new Font("宋書", Font.BOLD, 32));// 設(shè)置X軸標(biāo)簽字體
        xAxis.setAxisLineStroke(new BasicStroke(1f)); // 設(shè)置X軸線粗細(xì)
        xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 傾斜
        xAxis.setAxisLinePaint(Color.BLACK);// 軸線顏色
        xAxis.setUpperMargin(0.18D);// 右邊距
        xAxis.setLowerMargin(0.1D);// 左邊距
        // 縱坐標(biāo)
        ValueAxis yAxis = plot.getRangeAxis();
        yAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 25));// 設(shè)置y軸字體
        yAxis.setLabelFont(new Font("宋體", Font.BOLD, 32));// 設(shè)置X軸標(biāo)簽字體
        yAxis.setAxisLineStroke(new BasicStroke(1f)); // 設(shè)置y軸線粗細(xì)
        yAxis.setAxisLinePaint(Color.BLACK);// 軸線顏色
        yAxis.setUpperMargin(0.18D);// 上邊距
        yAxis.setLowerMargin(0.1D);// 下邊距
        LineAndShapeRenderer r1 = new LineAndShapeRenderer();
        // 數(shù)據(jù)標(biāo)簽
        r1.setBaseItemLabelsVisible(true);// 是否顯示數(shù)據(jù)標(biāo)簽
        r1.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());// 數(shù)據(jù)標(biāo)簽格式
        r1.setSeriesPaint(0, Color.BLUE);
        r1.setBaseShapesFilled(Boolean.TRUE); // 在數(shù)據(jù)點(diǎn)顯示實(shí)心的小圖標(biāo)
        r1.setBaseShapesVisible(true); // 設(shè)置顯示小圖標(biāo)
        r1.setBaseItemLabelFont(new Font("Dialog", Font.BOLD, 12));// 設(shè)置數(shù)字的字體大小
        r1.setBaseStroke(new BasicStroke(4f));
        // 線條顏色
        r1.setSeriesPaint(0, new Color(204, 232, 207)); 
        r1.setSeriesPaint(1, new Color(0x00, 0xff, 0xff)); 
        r1.setSeriesShapesVisible(0,  false);
        r1.setSeriesShapesVisible(1,  false);
        plot.setDataset(dataSet);
        // 應(yīng)用以上設(shè)置
        plot.setRenderer(r1); 
        // 條形圖間距設(shè)置
        // BarRenderer r = (BarRenderer) plot.getRenderer();
		// renderer.setItemMargin(0.01);
        // 顯示圖表
        ChartFrame chartFrame = new ChartFrame("Test", chart);
        chartFrame.pack();
        chartFrame.setVisible(true);  
	}
}

3. 其他設(shè)置

3.1 坐標(biāo)軸刻度設(shè)置

package com.test;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Test {
	public static void main(String[] args) throws IOException {
		// 創(chuàng)建數(shù)據(jù)
		final XYSeries data = new XYSeries( "InternetExplorer" );
		data.add( 1.0 , 4.0 );          
		data.add( 2.0 , 5.0 );          
		data.add( 3.0 , 4.0 ); 
		data.add( 4.0 , 5.0 );          
		data.add( 5.0 , 4.0 );          
		data.add( 6.0 , 5.0 );
		data.add( 6.0 , 4.0 ); 
		data.add( 7.0 , 5.0 ); 
		data.add( 8.0 , 4.0 ); 
		data.add( 9.0 , 5.0 ); 
		final XYSeriesCollection dataset = new XYSeriesCollection( );        
		dataset.addSeries(data);
	    // 創(chuàng)建JFreeChart對(duì)象
	    JFreeChart chart = ChartFactory.createXYLineChart(
	    		"Example", "X", "Y", dataset,
	    		PlotOrientation.VERTICAL,
	    		false, true, false);
	    // 設(shè)置坐標(biāo)軸刻度間距
	    XYPlot plot = (XYPlot) chart.getPlot();
	    NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();  
	    xAxis.setTickUnit(new NumberTickUnit(2));
	    // 保存到本地
	    File lineChart = new File( "1.png" ); 
	    ChartUtilities.saveChartAsPNG(lineChart ,chart, 1000 ,500);
	}
}

四、其他圖表

1. 時(shí)間序列圖

package plot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
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.TextAnchor;
import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
public class TimeSeriesChart {
    private TimeSeriesChart() {
        // A網(wǎng)站的訪問(wèn)量統(tǒng)計(jì)
        @SuppressWarnings("deprecation")
		TimeSeries timeSeries1 = new TimeSeries("A", Month.class);
        // 添加數(shù)據(jù)
        timeSeries1.add(new Month(1, 2016), 154);
        timeSeries1.add(new Month(2, 2016), 256);
        timeSeries1.add(new Month(3, 2016), 312);
        timeSeries1.add(new Month(4, 2016), 489);
        timeSeries1.add(new Month(5, 2016), 563);
        timeSeries1.add(new Month(6, 2016), 555);
        timeSeries1.add(new Month(7, 2016), 359);
        timeSeries1.add(new Month(8, 2016), 291);
        timeSeries1.add(new Month(9, 2016), 123);
        timeSeries1.add(new Month(10, 2016), 438);
        timeSeries1.add(new Month(11, 2016), 286);
        // A網(wǎng)站的訪問(wèn)量統(tǒng)計(jì)
        TimeSeries timeSeries2 = new TimeSeries("A", Month.class);
        // 添加數(shù)據(jù)
        timeSeries2.add(new Month(1, 2016), 124);
        timeSeries2.add(new Month(2, 2016), 326);
        timeSeries2.add(new Month(3, 2016), 12);
        timeSeries2.add(new Month(4, 2016), 567);
        timeSeries2.add(new Month(5, 2016), 546);
        timeSeries2.add(new Month(6, 2016), 123);
        timeSeries2.add(new Month(7, 2016), 222);
        timeSeries2.add(new Month(8, 2016), 545);
        timeSeries2.add(new Month(9, 2016), 56);
        timeSeries2.add(new Month(10, 2016), 543);
        timeSeries2.add(new Month(11, 2016), 221);
        // 定義時(shí)間序列的集合
        TimeSeriesCollection lineDataset = new TimeSeriesCollection();
        lineDataset.addSeries(timeSeries1);
        lineDataset.addSeries(timeSeries2);
//         JFreeChart chart = ChartFactory.createXYStepChart("Time line graph", "M", "F", xySeriesCollection, PlotOrientation.HORIZONTAL, false, false, false);
        JFreeChart chart = ChartFactory.createTimeSeriesChart("Time line graph", "M", "F", lineDataset, false, false, false);
        //設(shè)置主標(biāo)題
        chart.setTitle(new TextTitle("A,B網(wǎng)站訪問(wèn)量統(tǒng)計(jì)對(duì)比圖"));
        //設(shè)置子標(biāo)題
        TextTitle subtitle = new TextTitle("2016年度", new Font("宋體", Font.BOLD, 12));
        chart.addSubtitle(subtitle);
        chart.setAntiAlias(true);
        //設(shè)置時(shí)間軸的范圍。
        XYPlot plot = (XYPlot) chart.getPlot();
        DateAxis dateaxis = (DateAxis) plot.getDomainAxis();
        dateaxis.setDateFormatOverride(new SimpleDateFormat("M"));
        dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 2));
        //設(shè)置曲線是否顯示數(shù)據(jù)點(diǎn)
        XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer) plot.getRenderer();
        xylinerenderer.setBaseShapesVisible(true);
        //設(shè)置曲線顯示各數(shù)據(jù)點(diǎn)的值
        XYItemRenderer xyitem = plot.getRenderer();
        xyitem.setBaseItemLabelsVisible(true);
        xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
        xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
        xyitem.setBaseItemLabelFont(new Font("Dialog", Font.BOLD, 12));
        plot.setRenderer(xyitem);
        JPanel jPanel = new ChartPanel(chart);
        JFrame frame = new JFrame("JFreechart Test");
        frame.add(jPanel);
        frame.setBounds(0, 0, 800, 600);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        TimeSeriesChart timeSeriesChart = new TimeSeriesChart();
    }
}

2. XY階梯面積圖

package plot;
import java.awt.Color;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Example {
	public static void main(String[] args) throws IOException {
		// 創(chuàng)建XYSeriesCollection對(duì)象
		XYSeriesCollection dataset = new XYSeriesCollection();
		// 系列一數(shù)據(jù)
		XYSeries series1 = new XYSeries("Series1");
		series1.add(2, 4);
		series1.add(3, 6);
		series1.add(5, 2);
		series1.add(8, 5);
		series1.add(1, 8);
		// 系列二數(shù)據(jù)
		XYSeries series2 = new XYSeries("Series2");
		series2.add(5, 6);
		series2.add(9, 5);
		series2.add(10, 9);
		series2.add(18, 11);
		series2.add(15, 18);
		// 添加到數(shù)據(jù)集
		dataset.addSeries(series1);
		dataset.addSeries(series2);
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = ChartFactory.createXYStepAreaChart("XY Step Area Chart", // Chart Title
				"X-Axis", // X-Axis Label
				"Y-Axis", // Y-Axis Label
				dataset);
		XYPlot plot = (XYPlot) chart.getPlot();
		plot.setBackgroundPaint(new Color(229, 150, 97, 60));
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

3. 條形圖與折線圖結(jié)合

package plot;
import java.io.IOException;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
public class ShowExample {
	public static void main(String[] args) throws IOException {
		// 創(chuàng)建數(shù)據(jù)
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(1.0, "A", "Ⅰ");
		dataset.addValue(3.0, "A", "Ⅱ");
		dataset.addValue(5.0, "A", "Ⅲ");
		dataset.addValue(5.0, "A", "Ⅳ");
		dataset.addValue(5.0, "B", "Ⅰ");
		dataset.addValue(6.0, "B", "Ⅱ");
		dataset.addValue(10.0, "B", "Ⅲ");
		dataset.addValue(4.0, "B", "Ⅳ");
		// 創(chuàng)建CategoryPlot對(duì)象
		CategoryPlot plot = new CategoryPlot();
		// 添加第一個(gè)數(shù)據(jù)集并渲染為line
		CategoryItemRenderer lineRenderer = new LineAndShapeRenderer();
		plot.setDataset(0, dataset);
		plot.setRenderer(0, lineRenderer);
		// 添加第二個(gè)數(shù)據(jù)集并渲染為線條bar
		CategoryItemRenderer baRenderer = new BarRenderer();
		plot.setDataset(1, dataset);
		plot.setRenderer(1, baRenderer);
		// 設(shè)置坐標(biāo)軸
		plot.setDomainAxis(new CategoryAxis("Time"));
		plot.setRangeAxis(new NumberAxis("Value"));
		// 創(chuàng)建JFreeChart對(duì)象
		JFreeChart chart = new JFreeChart(plot);
		// 利用awt進(jìn)行顯示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
}

參考資料

官網(wǎng):www.jfree.org

中文JFreeChart教程

英文JFreeChart教程

 JFreeChart | BORAJI.COM

https://www.roseindia.net/chartgraphs/index.shtml

到此這篇關(guān)于Java繪圖庫(kù)JFreeChart的使用教程的文章就介紹到這了,更多相關(guān)Java繪圖庫(kù)JFreeChart內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制的方法

    spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制的方法

    spring-boot是一個(gè)快速的集成框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過(guò)程。這篇文章主要介紹了spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制,需要的朋友可以參考下
    2018-01-01
  • java之swing單選框用法實(shí)例分析

    java之swing單選框用法實(shí)例分析

    這篇文章主要介紹了java之swing單選框用法,以實(shí)例形式分析了swing圖形界面單選框的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • mybatis-plus實(shí)體類中出現(xiàn)非數(shù)據(jù)庫(kù)映射字段解決辦法

    mybatis-plus實(shí)體類中出現(xiàn)非數(shù)據(jù)庫(kù)映射字段解決辦法

    這篇文章主要介紹了mybatis-plus實(shí)體類中出現(xiàn)非數(shù)據(jù)庫(kù)映射字段解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java面試題沖刺第七天--Spring框架1

    Java面試題沖刺第七天--Spring框架1

    這篇文章主要為大家分享了最有價(jià)值的三道Spring框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot中使用Knife4J的解決方案

    SpringBoot中使用Knife4J的解決方案

    knife4j是為Java?MVC框架集成Swagger生成Api文檔的增強(qiáng)解決方案,這篇文章主要介紹了SpringBoot中使用Knife4J,需要的朋友可以參考下
    2022-10-10
  • Java多線程之線程的創(chuàng)建

    Java多線程之線程的創(chuàng)建

    這篇文章主要介紹了Java多線程之線程的創(chuàng)建,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java基礎(chǔ)之反射原理與用法詳解

    Java基礎(chǔ)之反射原理與用法詳解

    這篇文章主要介紹了Java基礎(chǔ)之反射原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了java反射的相關(guān)概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    在jdk8以后,java提供了一個(gè)性能更優(yōu)越的讀寫鎖并發(fā)類StampedLock,該類的設(shè)計(jì)初衷是作為一個(gè)內(nèi)部工具類,用于輔助開發(fā)其它線程安全組件。本文就來(lái)和大家一起學(xué)習(xí)下StampedLock的功能和使用
    2022-10-10
  • JAVA刪除字符串固定下標(biāo)字串的實(shí)現(xiàn)

    JAVA刪除字符串固定下標(biāo)字串的實(shí)現(xiàn)

    本文主要介紹了JAVA刪除字符串固定下標(biāo)字串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • springboot項(xiàng)目啟動(dòng)自動(dòng)跳轉(zhuǎn)到瀏覽器的操作代碼

    springboot項(xiàng)目啟動(dòng)自動(dòng)跳轉(zhuǎn)到瀏覽器的操作代碼

    這篇文章主要介紹了springboot項(xiàng)目啟動(dòng)自動(dòng)跳轉(zhuǎn)到瀏覽器的操作代碼,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03

最新評(píng)論