前言
在数据可视化的世界中,图表是展示数据的强大工具。无论是折线图、柱状图还是饼图,它们都能帮助我们更直观地理解数据。在 java 生态中,jfreechart 是一个功能强大且灵活的图表库,广泛应用于各种 java 应用程序中。本文将带你从零开始学习如何使用 jfreechart 创建动态图表,并结合实际代码示例,让你快速掌握其核心功能。
一、jfreechart 简介
jfreechart 是一个开源的 java 图表库,支持多种图表类型,包括:
折线图(line chart)
柱状图(bar chart)
饼图(pie chart)
散点图(scatter plot)
面积图(area chart)
它的主要特点包括:
易于使用:通过简单的 api 即可创建复杂的图表。
高度可定制:支持自定义颜色、字体、样式等。
支持导出:可以将图表导出为 png、jpeg、pdf 等格式。
二、环境准备
在开始之前,我们需要在项目中引入 jfreechart 的依赖。如果你使用 maven,可以在 pom.xml 中添加以下依赖:
<dependency> <groupid>org.jfree</groupid> <artifactid>jfreechart</artifactid> <version>1.5.3</version> </dependency>
三、 创建第一个折线图
折线图是展示数据趋势的常用图表类型。以下是一个简单的示例,展示如何使用 jfreechart 创建一个折线图。
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) { // 创建数据集 defaultcategorydataset dataset = new defaultcategorydataset(); dataset.addvalue(1, "series1", "category1"); dataset.addvalue(4, "series1", "category2"); dataset.addvalue(3, "series1", "category3"); dataset.addvalue(5, "series1", "category4"); // 创建折线图 jfreechart chart = chartfactory.createlinechart( "sample line chart", // 图表标题 "category", // x轴标签 "value", // y轴标签 dataset // 数据集 ); // 保存图表为图片 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(); } } }
运行结果
运行上述代码后,会生成一个名为 line_chart.png 的图片文件,内容如下:
标题:sample line chart
x 轴标签:category
y 轴标签:value
数据点:(category1, 1), (category2, 4), (category3, 3), (category4, 5)
四、自定义图表样式
jfreechart 提供了丰富的 api 来自定义图表样式。以下是一些常见的自定义操作:
4.1 设置背景色
import java.awt.color; // 设置图表背景色 chart.setbackgroundpaint(color.white); // 设置绘图区域背景色 categoryplot plot = chart.getcategoryplot(); plot.setbackgroundpaint(color.light_gray);
4.2 设置折线颜色
import org.jfree.chart.renderer.category.lineandshaperenderer; // 获取渲染器 lineandshaperenderer renderer = (lineandshaperenderer) plot.getrenderer(); // 设置折线颜色 renderer.setseriespaint(0, color.red); // 第一条折线为红色 renderer.setseriesstroke(0, new basicstroke(2.0f)); // 设置线条粗细
4.3 设置字体(解决中文乱码)
import org.jfree.chart.standardcharttheme; // 设置全局字体 standardcharttheme charttheme = new standardcharttheme("cn"); charttheme.setextralargefont(new font("宋体", font.plain, 20)); // 标题字体 charttheme.setlargefont(new font("宋体", font.plain, 16)); // 图例字体 charttheme.setregularfont(new font("宋体", font.plain, 14)); // 轴标签字体 chartfactory.setcharttheme(charttheme);
4.4 设置横坐标的标签宽度和方向
categoryaxis categoryaxis = chart.getcategoryplot().getdomainaxis(); categoryaxis.setmaximumcategorylabellines(2); // 允许每个标签最多两行 categoryaxis.setcategorylabelpositions(categorylabelpositions.up_45); // 旋转标签 categoryaxis.setlowermargin(0.0); // 去掉边缘空白 categoryaxis.setuppermargin(0.0); // 去掉边缘空白
五、导出图表
jfreechart 支持将图表导出为多种格式,如 png、jpeg、pdf 等。以下是将图表保存为 png 文件的示例:
import org.jfree.chart.chartutils; // 保存图表为 png 文件 chartutils.savechartaspng(new file("chart.png"), chart, 800, 600);
六、实战:动态生成日报图表
以下是一个实战示例,展示如何动态生成日报中的折线图,并将其插入到 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 { // 创建数据集 defaultcategorydataset dataset = new defaultcategorydataset(); dataset.addvalue(10, "监测站", "00:00"); dataset.addvalue(20, "监测站", "06:00"); dataset.addvalue(30, "监测站", "12:00"); dataset.addvalue(40, "监测站", "18:00"); // 创建折线图 jfreechart chart = chartfactory.createlinechart( "监测站总在线数", // 图表标题 "小时", // x轴标签 "数量", // y轴标签 dataset // 数据集 ); // 保存图表为图片 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"); } }
总结
通过本文,你已经掌握了 jfreechart 的基本用法,包括:
创建折线图、柱状图等常见图表。
自定义图表样式(背景色、折线颜色、字体等)。
将图表导出为图片或插入到 word 文档中。
jfreechart 是一个功能强大且灵活的图表库,适用于各种数据可视化需求。希望本文能帮助你快速上手jfreechart,并在实际项目中应用它!
到此这篇关于java使用jfreechart创建动态图表的代码示例的文章就介绍到这了,更多相关java jfreechart创建动态图表内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论