Java使用JFreeChart創(chuàng)建動(dòng)態(tài)圖表的代碼示例
前言
在數(shù)據(jù)可視化的世界中,圖表是展示數(shù)據(jù)的強(qiáng)大工具。無論是折線圖、柱狀圖還是餅圖,它們都能幫助我們更直觀地理解數(shù)據(jù)。在 Java 生態(tài)中,JFreeChart 是一個(gè)功能強(qiáng)大且靈活的圖表庫,廣泛應(yīng)用于各種 Java 應(yīng)用程序中。本文將帶你從零開始學(xué)習(xí)如何使用 JFreeChart 創(chuàng)建動(dòng)態(tài)圖表,并結(jié)合實(shí)際代碼示例,讓你快速掌握其核心功能。
一、JFreeChart 簡(jiǎn)介
JFreeChart 是一個(gè)開源的 Java 圖表庫,支持多種圖表類型,包括:
折線圖(Line Chart)
柱狀圖(Bar Chart)
餅圖(Pie Chart)
散點(diǎn)圖(Scatter Plot)
面積圖(Area Chart)
它的主要特點(diǎn)包括:
易于使用:通過簡(jiǎn)單的 API 即可創(chuàng)建復(fù)雜的圖表。
高度可定制:支持自定義顏色、字體、樣式等。
支持導(dǎo)出:可以將圖表導(dǎo)出為 PNG、JPEG、PDF 等格式。
二、環(huán)境準(zhǔn)備
在開始之前,我們需要在項(xiàng)目中引入 JFreeChart 的依賴。如果你使用 Maven,可以在 pom.xml 中添加以下依賴:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
三、 創(chuàng)建第一個(gè)折線圖
折線圖是展示數(shù)據(jù)趨勢(shì)的常用圖表類型。以下是一個(gè)簡(jiǎn)單的示例,展示如何使用 JFreeChart 創(chuàng)建一個(gè)折線圖。
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import java.io.File;
import java.io.IOException;
public class LineChartExample {
public static void main(String[] args) {
// 創(chuàng)建數(shù)據(jù)集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1, "Series1", "Category1");
dataset.addValue(4, "Series1", "Category2");
dataset.addValue(3, "Series1", "Category3");
dataset.addValue(5, "Series1", "Category4");
// 創(chuàng)建折線圖
JFreeChart chart = ChartFactory.createLineChart(
"Sample Line Chart", // 圖表標(biāo)題
"Category", // X軸標(biāo)簽
"Value", // Y軸標(biāo)簽
dataset // 數(shù)據(jù)集
);
// 保存圖表為圖片
try {
ChartUtils.saveChartAsPNG(new File("line_chart.png"), chart, 600, 400);
System.out.println("Chart saved as line_chart.png");
} catch (IOException e) {
e.printStackTrace();
}
}
}
運(yùn)行結(jié)果
運(yùn)行上述代碼后,會(huì)生成一個(gè)名為 line_chart.png 的圖片文件,內(nèi)容如下:
標(biāo)題:Sample Line Chart
X 軸標(biāo)簽:Category
Y 軸標(biāo)簽:Value
數(shù)據(jù)點(diǎn):(Category1, 1), (Category2, 4), (Category3, 3), (Category4, 5)
四、自定義圖表樣式
JFreeChart 提供了豐富的 API 來自定義圖表樣式。以下是一些常見的自定義操作:
4.1 設(shè)置背景色
import java.awt.Color; // 設(shè)置圖表背景色 chart.setBackgroundPaint(Color.WHITE); // 設(shè)置繪圖區(qū)域背景色 CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint(Color.LIGHT_GRAY);
4.2 設(shè)置折線顏色
import org.jfree.chart.renderer.category.LineAndShapeRenderer; // 獲取渲染器 LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); // 設(shè)置折線顏色 renderer.setSeriesPaint(0, Color.RED); // 第一條折線為紅色 renderer.setSeriesStroke(0, new BasicStroke(2.0f)); // 設(shè)置線條粗細(xì)
4.3 設(shè)置字體(解決中文亂碼)
import org.jfree.chart.StandardChartTheme;
// 設(shè)置全局字體
StandardChartTheme chartTheme = new StandardChartTheme("CN");
chartTheme.setExtraLargeFont(new Font("宋體", Font.PLAIN, 20)); // 標(biāo)題字體
chartTheme.setLargeFont(new Font("宋體", Font.PLAIN, 16)); // 圖例字體
chartTheme.setRegularFont(new Font("宋體", Font.PLAIN, 14)); // 軸標(biāo)簽字體
ChartFactory.setChartTheme(chartTheme);
4.4 設(shè)置橫坐標(biāo)的標(biāo)簽寬度和方向
CategoryAxis categoryAxis = chart.getCategoryPlot().getDomainAxis(); categoryAxis.setMaximumCategoryLabelLines(2); // 允許每個(gè)標(biāo)簽最多兩行 categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 旋轉(zhuǎn)標(biāo)簽 categoryAxis.setLowerMargin(0.0); // 去掉邊緣空白 categoryAxis.setUpperMargin(0.0); // 去掉邊緣空白
五、導(dǎo)出圖表
JFreeChart 支持將圖表導(dǎo)出為多種格式,如 PNG、JPEG、PDF 等。以下是將圖表保存為 PNG 文件的示例:
import org.jfree.chart.ChartUtils;
// 保存圖表為 PNG 文件
ChartUtils.saveChartAsPNG(new File("chart.png"), chart, 800, 600);
六、實(shí)戰(zhàn):動(dòng)態(tài)生成日?qǐng)?bào)圖表
以下是一個(gè)實(shí)戰(zhàn)示例,展示如何動(dòng)態(tài)生成日?qǐng)?bào)中的折線圖,并將其插入到 Word 文檔中。
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.PictureType;
import com.deepoove.poi.data.Pictures;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
public class DailyReportExample {
public static void main(String[] args) throws Exception {
// 創(chuàng)建數(shù)據(jù)集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "監(jiān)測(cè)站", "00:00");
dataset.addValue(20, "監(jiān)測(cè)站", "06:00");
dataset.addValue(30, "監(jiān)測(cè)站", "12:00");
dataset.addValue(40, "監(jiān)測(cè)站", "18:00");
// 創(chuàng)建折線圖
JFreeChart chart = ChartFactory.createLineChart(
"監(jiān)測(cè)站總在線數(shù)", // 圖表標(biāo)題
"小時(shí)", // X軸標(biāo)簽
"數(shù)量", // Y軸標(biāo)簽
dataset // 數(shù)據(jù)集
);
// 保存圖表為圖片
String chartPath = "daily_chart.png";
ChartUtils.saveChartAsPNG(new File(chartPath), chart, 800, 600);
// 將圖片插入到 Word 文檔
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("chart", Pictures.ofStream(new FileInputStream(chartPath), PictureType.PNG).create());
XWPFTemplate template = XWPFTemplate.compile("template.docx").render(dataMap);
template.writeToFile("output.docx");
}
}
總結(jié)
通過本文,你已經(jīng)掌握了 JFreeChart 的基本用法,包括:
創(chuàng)建折線圖、柱狀圖等常見圖表。
自定義圖表樣式(背景色、折線顏色、字體等)。
將圖表導(dǎo)出為圖片或插入到 Word 文檔中。
JFreeChart 是一個(gè)功能強(qiáng)大且靈活的圖表庫,適用于各種數(shù)據(jù)可視化需求。希望本文能幫助你快速上手JFreeChart,并在實(shí)際項(xiàng)目中應(yīng)用它!
到此這篇關(guān)于Java使用JFreeChart創(chuàng)建動(dòng)態(tài)圖表的代碼示例的文章就介紹到這了,更多相關(guān)Java JFreeChart創(chuàng)建動(dòng)態(tài)圖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過程解析
這篇文章主要介紹了Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Vue?+?springboot實(shí)現(xiàn)拼圖人機(jī)驗(yàn)證功能
本文介紹了如何使用Vue和Spring?Boot實(shí)現(xiàn)拼圖人機(jī)驗(yàn)證功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-01-01
Java線程池高效并發(fā)編程實(shí)戰(zhàn)技巧
線程池是一種線程管理機(jī)制,它預(yù)先創(chuàng)建一定數(shù)量的線程并放入池中,當(dāng)需要執(zhí)行任務(wù)時(shí),從池中獲取空閑線程來執(zhí)行任務(wù),任務(wù)完成后線程不銷毀而是返回池中等待下一次任務(wù),這篇文章給大家介紹Java線程池高效并發(fā)編程實(shí)戰(zhàn)技巧,感興趣的朋友跟隨小編一起看看吧2026-02-02
使用eclipse創(chuàng)建java項(xiàng)目的方法
這篇文章主要為大家詳細(xì)介紹了使用eclipse創(chuàng)建java項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Springboot整合ip2region實(shí)現(xiàn)用戶ip歸屬地獲取
ip2region是一個(gè)離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實(shí)現(xiàn),下面我們來看看如何使用ip2region實(shí)現(xiàn)用戶ip歸屬地獲取吧2025-05-05
springboot掃描引入jar包的service等組件方式
這篇文章主要介紹了springboot掃描引入jar包的service等組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
MyBatis攔截器動(dòng)態(tài)替換表名的方法詳解
因?yàn)槲覀兂志脤涌蚣芨嗟厥褂肕yBatis,那我們就借助于MyBatis的攔截器來完成我們的功能,這篇文章主要給大家介紹了關(guān)于MyBatis攔截器動(dòng)態(tài)替換表名的相關(guān)資料,需要的朋友可以參考下2022-04-04
Maven中兩個(gè)命令clean 和 install的使用
Maven是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具,clean命令用于刪除項(xiàng)目中由先前構(gòu)建生成的target目錄,install命令用于將打包好的jar包安裝到本地倉庫中,供其他項(xiàng)目依賴使用,下面就來詳細(xì)的介紹一下這兩個(gè)命令2024-09-09

