使用 JFreeChart 创建动态图表:从入门到实战

文章目录

  • 前言
  • 一、JFreeChart 简介
  • 二、环境准备
  • 三、 创建第一个折线图
  • 四、自定义图表样式
    • 4.1 设置背景色
    • 4.2 设置折线颜色
    • 4.3 设置字体(解决中文乱码)
    • 4.4 设置横坐标的标签宽度和方向
  • 五、导出图表
  • 六、实战:动态生成日报图表
  • 总结


前言

在数据可视化的世界中,图表是展示数据的强大工具。无论是折线图、柱状图还是饼图,它们都能帮助我们更直观地理解数据。在 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,并在实际项目中应用它!
参考资料:
JFreeChart 官方文档
JFreeChart GitHub 仓库


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 940 (Div. 2) and CodeCraft-23(A-D)

题目链接&#xff1a;Dashboard - Codeforces Round 940 (Div. 2) and CodeCraft-23 - Codeforces A. Stickogon 思路 正多边形意味着要用相等的木棍&#xff0c;相等的木棍最少需要3根才能组成正三角&#xff0c;我们把相等的数的数量除3加起来 代码 void solve(){int n;…

C++开发(软件开发)常见面试题

目录 1、C里指针和数组的区别 2、C中空指针请使用nullptr不要使用NULL 3、http/https区别和头部结构&#xff1f; 4、有了mac地址为什么还要ip地址&#xff1f;ip地址的作用 5、有了路由器为什么还要交换机&#xff1f; 6、面向对象三大特性 7、友元函数 8、大端小端 …

常用数据结构之String字符串

字符串 在Java编程语言中&#xff0c;字符可以使用基本数据类型char来保存&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 操作字符串常用的有三种类&#xff1a;String、StringBuilder、StringBuffer 接下来看看这三类常见用…

wordpressAI工具,已接入Deepseek 支持自动生成文章、生成图片、生成长尾关键词、前端AI窗口互动、批量采集等

基于关键词或现有内容生成SEO优化的文章&#xff0c;支持多种AI服务&#xff08;如OpenAI、百度文心一言、智谱AI等&#xff09;&#xff0c;并提供定时任务、内容采集、关键词生成等功能。 核心功能 文章生成 关键词生成&#xff1a;根据输入的关键词生成高质量文章。 内容…

Vite 为什么快,是怎么打包的

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

协议-ACLLite-ffmpeg

是什么&#xff1f; FFmpeg是一个开源的多媒体处理工具包&#xff0c;它集成了多种功能&#xff0c;包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成&#xff0c;其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…

【C++高并发服务器WebServer】-12:TCP详解及实现

本文目录 一、TCP通信流程二、套接字函数2.1 socket()2.2 bind()2.3 listen()2.4 accept()2.5 connect() 三、demo实现3.1 server端代码3.2 client端代码 四、TCP三次握手五、TCP滑动窗口六、TCP四次挥手七、多进程并发服务器 一、TCP通信流程 先来讲讲服务器端&#xff0c;是…

【Maven】项目管理工具-Maven

目录 1. Maven简介 1.1 项目管理 1.2 项目构建 1.3 项目构建工具 1.4 Maven的四大特征 1.4.1 依赖管理系统 1.4.2 多模块构建 1.4.3 一致的项目结构 1.4.4 一致的构建模型和插件机制 1.5 Maven模型 ​编辑 2.maven的安装配置 2.1 Maven的安装配置 2.1.1检测jdk的版…

dijkstra算法类型题解

dijkstra算法&#xff08;有权图&#xff0c;无权图&#xff09;&#xff1a; 带权路径长度——当图是带权图时&#xff0c;一条路径上所有边的权值之和&#xff0c;称为该路径的带权路径长度 初始化三个数组&#xff0c;final标记各顶点是否已找到最短路径&#xff0c;dist最…

RabbitMQ 消息顺序性保证

方式一&#xff1a;Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费&#xff0c;并将exclusive设置为true时&#xff0c;第二个消费者会抛出异常&#xff1a; com.rabbitmq.client.AlreadyClosedEx…

基于开源AI智能名片2+1链动模式S2B2C商城小程序的个人IP活动运营策略与影响力提升研究

摘要&#xff1a;本文围绕个人IP运营者借助活动运营提升影响力这一主题&#xff0c;深入探讨如何将开源AI智能名片21链动模式S2B2C商城小程序融入借势、造势、提升参与感及用户激励等活动运营环节。通过分析该创新模式与活动运营各要素的结合点&#xff0c;为个人IP运营者提供切…

计算机图形学论文 | 面向制造的设计: 五轴铣削的几何制造可行性评估

&#x1f355;&#x1f355;&#x1f355;宝子们好久不见&#xff0c;新年快乐~~~&#xff0c;今天我们来更新一篇关于五轴CNC制造中的模型制造可达性分析的论文。老规矩&#xff1a; 红色是名词&#xff0c;蓝色是结论&#xff0c;绿色是文章工作&#xff0c;黄色是一些其他重…

deepseek搭建本地知识库

ollama是一个大模型的运行框架&#xff0c;在上面可以运行不同的大模型 部署deepseek 下载ollama&#xff1a;https://ollama.com/ 下载模型&#xff1a;https://ollama.com/library/deepseek-r1:1.5b ollama run deepseek-r1:1.5b运行起来之后&#xff0c;本地命令行就可以…

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要

青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要 一、Django 5Django 5 的主要特性包括&#xff1a; 二、MVT模式三、官方网站四、内置功能数据库 ORM&#xff08;对象关系映射&#xff09;用户认证和授权表单处理模板引擎URL 路由缓存框架国际化和本地化安全性功能管…

deepseek本地部署-linux

1、官网推荐安装方法(使用脚本,我绕不过github,未采用) 登录ollama下载网站https://ollama.com/download/linux,linux下有下载脚本。 正常来说,在OS系统下直接执行脚本即可。 2、手动安装方法 2.1获取ollama-linux-arm64.tgz wget https://ollama.com/download/ollam…

多光谱技术在华为手机上的应用发展历史

2018 年&#xff0c;华为 P20 系列首次搭载 5 通道色温传感器&#xff0c;可帮助手机在不同光照条件下保持画面色彩一致性。 2020 年&#xff0c;华为 P40 系列搭载 8 通道多光谱色温传感器&#xff08;实际为 11 通道&#xff0c;当时只用 8 个通道检测可见光&#xff09;&am…

增加工作台菜单页面,AI问答应用支持上下文设置,数据库表索引优化,zyplayer-doc 2.4.8 发布啦!

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;支持在线编辑富文本、Markdown、表格、Office文档、API接口、思维导图、Drawio以及任意的文本文件&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或个人的数据安全&#xff0c;支持以内…

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…

基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头

知识点&#xff1a; 1、网站协议-http/https安全差异&#xff08;抓包&#xff09; 2、身份鉴权-HTTP头&OAuth2&JWT&Token 一、演示案例-网站协议-http&https-安全测试差异性 1、加密方式 HTTP&#xff1a;使用明文传输&#xff0c;数据在传输过程中可以被…

【零基础学Mysql】常用函数讲解,提升数据操作效率的利器

以耳倾听世间繁华&#xff0c;以语表达心中所想 大家好,我是whisperrrr. 前言&#xff1a; 大家好&#xff0c;我是你们的朋友whisrrr。在日常工作中&#xff0c;MySQL作为一款广泛使用的开源关系型数据库&#xff0c;其强大的功能为我们提供了便捷的数据存储和管理手段。而在…