## 7.2 使用categoryDataset數據集創建折線圖
### 7.2.1 概述
使用CategoryDataset創建的折線圖將每個數據點(種類,值)使用一條直線連接起來。本章講的一個簡單應用產生如下界面,如圖7.1:

圖7.1 一個簡單的折線圖
全部的代碼簡JFreeChart開發指南一并下載的demo(參考:LineChartDemo1.java)。
### 7.2.2 CategoryDataset
正如其他圖表一樣,創建折線圖的第一步是創建第一個dataset。在本例子中,使用DefaultCategoryDataset,代碼如下:
```
private static CategoryDataset createDataset() {
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(212.0, "Classes", "JDK 1.0");
defaultcategorydataset.addValue(504.0, "Classes", "JDK 1.1");
defaultcategorydataset.addValue(1520.0, "Classes", "JDK 1.2");
defaultcategorydataset.addValue(1842.0, "Classes", "JDK 1.3");
defaultcategorydataset.addValue(2991.0, "Classes", "JDK 1.4");
defaultcategorydataset.addValue(3500.0, "Classes", "JDK 1.5");
return defaultcategorydataset;
}
```
注意:你可以使用任何實現Category接口的數據集。
### 7.2.3 創建圖表
ChartFactory類提供了一個便利的方法createLineChart()創建折線圖。代碼如下:
```
JFreeChart jfreechart = ChartFactory.createLineChart(
"Java Standard Class Library",// 圖表標題
null, // 主軸標簽
"Class Count",// 范圍軸標簽
categorydataset, // 數據集
PlotOrientation.VERTICAL,// 方向
false, // 是否包含圖例
true, // 提示信息是否顯示
false// 是否使用urls
);
```
該方法構建了一個帶有標題、圖例、和相應的數軸和心態提示產生器的JFreeChart對象。創建Dataset數據集的過程見上節。
### 7.2.4 定制圖表
折線圖表將使用大部分缺省的屬性來進行初始化。當然了,我們也可以隨意修改折線圖的屬性,來改變我們圖表的外觀。在本例中,我們通過下面的方式定制折線圖:
+ 在圖表上添加兩個副標題;
+ 圖表的背景顏色設成白色;
+ 圖區背景顏色設成亮灰色;
+ 網格線顏色改變成白色;
+ 范圍軸修改成僅顯示整數數值;
+ renderer使用白色填充的形狀。
首先,將副標題添加在缺省的位置(主標題下方),代碼如下:
```
jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));
```
第二個副標題加入了一些額外的代碼,來改變字體,并放置在圖表的下方,并且靠右對其,代碼如下:
```
TextTitle texttitle = (new TextTitle("Source: Java In A Nutshell (5th Edition) by David Flanagan (O'Reilly)"));
texttitle.setFont(new Font("SansSerif", 0, 10));
texttitle.setPosition(RectangleEdge.BOTTOM);
texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
jfreechart.addSubtitle(texttitle);
```
改變圖表的背景顏色非常簡單,因為JFreeChart類就有設置背景顏色的屬性。代碼如下:
```
//改變圖表的背景顏色
jfreechart.setBackgroundPaint(Color.white);
```
如果改變其他屬性的,則需要首先獲得圖表CategoryPlot對象的引用,然后對該引用進行相應屬性的設置。獲得對象引用的代碼如下:
```
CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
```
使用CategoryPlot設置圖區的背景顏色為亮灰色,設置網格線顏色為白色的代碼如下:
```
categoryplot.setBackgroundPaint(Color.lightGray);
categoryplot.setRangeGridlinePaint(Color.white);
```
圖區負責在圖表上畫出數據和軸。其中一部分工作由renderer來完成,我們可以通過getRender()來獲得一個renderer。renderer維護大部分與圖表內數據項的顯示相關的屬性。代碼如下:
```
LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryplot.getRenderer();
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
```
同時圖區也管理著圖表所有的軸。在本實例中,修改范圍軸以便范圍軸的刻度標簽顯示為整數值。
```
NumberAxis rangeAxis = (NumberAxis) categoryplot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
```
定制圖表還有很多其他的方式。具體的內容詳見本文檔相關章節,API文檔以及源代碼實例。
### 7.2.5 程序的全部代碼
```
/* -------------------
* LineChartDemo1.java
* -------------------
* (C) Copyright 2002-2005, by Object Refinery Limited.
*
*/
package demo;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.geom.Ellipse2D;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;
public class LineChartDemo1 extends ApplicationFrame {
/**
*
*/
private static final long serialVersionUID = -6354350604313079793L;
/* synthetic */static Class class$demo$LineChartDemo1;
public LineChartDemo1(String string) {
super(string);
JPanel jpanel = createDemoPanel();
jpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(jpanel);
}
private static CategoryDataset createDataset() {
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(212.0, "Classes", "JDK 1.0");
defaultcategorydataset.addValue(504.0, "Classes", "JDK 1.1");
defaultcategorydataset.addValue(1520.0, "Classes", "JDK 1.2");
defaultcategorydataset.addValue(1842.0, "Classes", "JDK 1.3");
defaultcategorydataset.addValue(2991.0, "Classes", "JDK 1.4");
defaultcategorydataset.addValue(3500.0, "Classes", "JDK 1.5");
return defaultcategorydataset;
}
private static JFreeChart createChart(CategoryDataset categorydataset) {
JFreeChart jfreechart = ChartFactory.createLineChart(
"Java Standard Class Library",// 圖表標題
null, // 主軸標簽
"Class Count",// 范圍軸標簽
categorydataset, // 數據集
PlotOrientation.VERTICAL,// 方向
false, // 是否包含圖例
true, // 提示信息是否顯示
false// 是否使用urls
);
// 添加主標題
jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));
TextTitle texttitle = (new TextTitle(
"Source: Java In A Nutshell (5th Edition) by David Flanagan (O'Reilly)"));
texttitle.setFont(new Font("SansSerif", 0, 10));
texttitle.setPosition(RectangleEdge.BOTTOM);
texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
jfreechart.addSubtitle(texttitle);
// 改變圖表的背景顏色
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.lightGray);
categoryplot.setRangeGridlinePaint(Color.white);
categoryplot.setRangeGridlinesVisible(false);
URL url = (class$demo$LineChartDemo1 == null ? class$demo$LineChartDemo1 = class$("demo.LineChartDemo1")
: class$demo$LineChartDemo1).getClassLoader().getResource(
"OnBridge11small.png");
if (url != null) {
ImageIcon imageicon = new ImageIcon(url);
jfreechart.setBackgroundImage(imageicon.getImage());
categoryplot.setBackgroundPaint(new Color(0, 0, 0, 0));
}
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
.getRenderer();
lineandshaperenderer.setShapesVisible(true);
lineandshaperenderer.setDrawOutlines(true);
lineandshaperenderer.setUseFillPaint(true);
lineandshaperenderer.setBaseFillPaint(Color.white);
lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3.0F));
lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F));
lineandshaperenderer.setSeriesShape(0, new Ellipse2D.Double(-5.0, -5.0,
10.0, 10.0));
LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryplot
.getRenderer();
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
return jfreechart;
}
public static JPanel createDemoPanel() {
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
}
public static void main(String[] strings) {
LineChartDemo1 linechartdemo1 = new LineChartDemo1(
"JFreeChart - Line Chart Demo 1");
linechartdemo1.pack();
RefineryUtilities.centerFrameOnScreen(linechartdemo1);
linechartdemo1.setVisible(true);
}
/* synthetic */
static Class class$(String string) {
Class var_class;
try {
var_class = Class.forName(string);
} catch (ClassNotFoundException classnotfoundexception) {
throw new NoClassDefFoundError(classnotfoundexception.getMessage());
}
return var_class;
}
}
```
- 1 簡介
- 1.1 什么是JFreeChart
- 1.2 使用文檔
- 1.3 感謝
- 1.4 建議
- 2 圖表實例
- 2.1 介紹
- 2.2 餅圖(Pie Charts)
- 2.3 直方條形圖(Bar Charts)
- 2.4 折線圖(Line Charts)
- 2.5 XY(散點圖)
- 2.6 時序圖
- 2.7 柱狀圖
- 2.8 面積圖
- 2.9 差異圖
- 2.10 梯形圖
- 2.11 甘特圖
- 2.12 多軸圖
- 2.13 復合/覆蓋圖
- 2.14 開發遠景
- 3 下載和安裝JFreeChart 1.0.6
- 3.1 簡介
- 3.2 下載
- 3.3 解包
- 3.4 運行演示實例
- 3.5 編譯源代碼
- 3.6 產生javadoc文檔
- 4 使用JFreeChart1.0.6
- 4.1 概述
- 4.2 創建第一個圖表
- 5 餅圖(Pie Charts)
- 5.1 簡介
- 5.2 創建一個簡單的餅圖(Pie Charts)
- 5.3 片區顏色
- 5.4 片區外廓
- 5.5 空置、零值和負值
- 5.6 片區和圖例標簽
- 5.7 “取出”某個片區
- 5.8 3D餅圖
- 5.9 多餅圖
- 5.10 實例講解
- 6 直方條形圖(Bar Charts)
- 6.1 簡介
- 6.2 創建一個直方條形圖
- 6.3 ChartFactory類
- 6.4 直方條形圖的簡單定制
- 6.5 定制外觀
- 6.6 示例代碼解讀
- 7 折線圖
- 7.1 簡介
- 7.2 使用categoryDataset數據集創建折線圖
- 7.3 使用XYDataset數據集創建折線圖
- 8 時序圖
- 8.1 簡介
- 8.2 創建時序圖
- 9 定制圖表(Customising Charts)
- 9.1 簡介
- 9.2 圖表屬性
- 9.3 圖區屬性
- 9.4 軸屬性
- 9.5 心得體會
- 10 動態圖(Dynamic Charts)
- 10.1 簡介
- 10.2 知識背景
- 10.3 實例應用
- 11 圖表工具條(Tooltips)
- 11.1 概述
- 11.2 創建圖表工具條
- 11.3 收集圖表工具條
- 11.4 顯示圖表工具條
- 11.5 隱藏圖表工具條
- 11.6 定制圖表工具條
- 12 圖表條目標簽(Item Label)
- 12.1 簡介
- 12.2 顯示條目標簽
- 12.3 條目標簽外觀
- 12.4 條目標簽位置
- 12.5 定制條目標簽文本
- 12.6 實例1
- 12.7 實例2
- 13 多軸和數據源圖表(Multi Axis and Dataset)
- 13.1 簡介
- 13.2 實例
- 13.3 建議和技巧
- 14 組合圖表(Combined Charts)
- 14.1 簡介
- 14.2 組合X種類圖區
- 14.3 組合Y種類圖區
- 14.4 組合X-XY圖區
- 14.5 組合Y-XY圖區
- 15 數據源和JDBC(Dataset And JDBC)
- 15.1 簡介
- 15.2 關于JDBC
- 15.3 樣本數據
- 15.4 PostgreSQL
- 15.5 JDBC驅動
- 15.6 應用演示
- 16 導出圖表為PDF格式
- 16.1 簡介
- 16.2 什么是Acrobat PDF
- 16.3 IText
- 16.4 Graphics2D
- 16.5 開始導出
- 16.6 實例應用
- 16.7 查看PDF 文件
- 16.8 Unicode字符問題
- 17 導出圖表為SVG格式
- 17.1 簡介
- 17.2 背景
- 17.3 實例代碼
- 18 Applet
- 18.1 簡介
- 18.2 問題
- 18.3 實例應用
- 19 Servlets
- 19.1 介紹
- 19.2 編寫一個簡單的Servlet應用
- 19.3 編譯實例Servlet
- 19.4 部署實例Servlet
- 19.5 在HMTL頁面種嵌入圖表
- 19.6 支持文件
- 19.7 部署Servlets
- 20 JFreeChart相關技術
- 20.1 簡介
- 20.2 X11/Headless Java
- 20.3 JSP
- 20.4 加載圖片
- 21 包
- 21.1 概述