用JFreeChart 生成报表

2023-05-16

JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

它所有的方法都是静态的,用起来很简便.

生成饼图:


package cn.zhangao.jfreechart;  

   

import java.awt.Font;  

import java.awt.Image;  

import java.io.File;  

   

import javax.imageio.ImageIO;  

   

import org.jfree.chart.ChartFactory;  

import org.jfree.chart.ChartUtilities;  

import org.jfree.chart.JFreeChart;  

import org.jfree.chart.labels.StandardPieSectionLabelGenerator;  

import org.jfree.chart.plot.PiePlot;  

import org.jfree.data.general.DefaultPieDataset;  

   

public class App {  

    public static void main(String[] args) {  

        try {  

            //如果不使用Font,中文将显示不出来  

            Font font = new Font("宋体", Font.BOLD, 15);  

   

            DefaultPieDataset pds = new DefaultPieDataset();  

            pds.setValue("sun", 100);  

            pds.setValue("ibm", 300);  

            pds.setValue("bea", 500);  

            pds.setValue("oracle", 700);  

            /**  

             * 生成一个饼图的图表  

             *   

             * 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接  

             */  

            JFreeChart chart = ChartFactory.createPieChart("标题", pds, true, false, true);  

            //设置图片标题的字体  

            chart.getTitle().setFont(font);  

   

            //得到图块,准备设置标签的字体  

            PiePlot plot = (PiePlot) chart.getPlot();  

   

            //设置分裂效果,需要指定分裂出去的key  

            plot.setExplodePercent("oracle", 0.3);  

   

            //设置标签字体  

            plot.setLabelFont(font);  

   

            //设置图例项目字体  

            chart.getLegend().setItemFont(font);  

   

            /**  

             * 设置开始角度(弧度计算)  

             *   

             * 度    0°    30°        45°        60°        90°        120°    135°    150°    180°    270°    360°  

             * 弧度    0    π/6        π/4        π/3        π/2        2π/3    3π/4    5π/6    π        3π/2    2π  

             */  

            plot.setStartAngle(new Float(3.14f / 2f));  

   

            //设置背景图片,设置最大的背景  

            Image img = ImageIO.read(new File("d:/sunset.jpg"));  

            chart.setBackgroundImage(img);  

   

            //设置plot的背景图片  

            img = ImageIO.read(new File("d:/Water.jpg"));  

            plot.setBackgroundImage(img);  

   

            //设置plot的前景色透明度  

            plot.setForegroundAlpha(0.7f);  

   

            //设置plot的背景色透明度  

            plot.setBackgroundAlpha(0.0f);  

   

            //设置标签生成器(默认{0})  

            //{0}:key {1}:value {2}:百分比 {3}:sum  

            plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}"));  

   

            //将内存中的图片写到本地硬盘  

            ChartUtilities.saveChartAsJPEG(new File("d:/pie.jpg"), chart, 600, 300);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

效果:

image

还可以生成3D效果的图片,只需要轻松地修改几个调用的方法即可:


JFreeChart chart = ChartFactory.createPieChart3D("标题", pds, true, false, true);  

PiePlot3D plot = (PiePlot3D) chart.getPlot();  

其他地方都不用改.但是需要注意的是:3D不能使用分裂效果!

image

生成柱状图:


package cn.zhangao.jfreechart;  

   

import java.awt.Font;  

import java.io.File;  

   

import javax.imageio.ImageIO;  

   

import org.jfree.chart.ChartFactory;  

import org.jfree.chart.ChartUtilities;  

import org.jfree.chart.JFreeChart;  

import org.jfree.chart.plot.CategoryPlot;  

import org.jfree.chart.plot.PlotOrientation;  

import org.jfree.data.category.DefaultCategoryDataset;  

   

public class AppBar {  

    public static void main(String[] args) {  

        try {  

            //种类数据集  

            DefaultCategoryDataset ds = new DefaultCategoryDataset();  

   

            ds.setValue(100, "ibm", "第一季度");  

            ds.setValue(200, "ibm", "第二季度");  

            ds.setValue(600, "ibm", "第三季度");  

   

            ds.setValue(500, "google", "第一季度");  

            ds.setValue(333, "google", "第二季度");  

            ds.setValue(780, "google", "第三季度");  

   

            ds.setValue(600, "用友", "第一季度");  

            ds.setValue(1500, "用友", "第二季度");  

            ds.setValue(300, "用友", "第三季度");  

   

            Font font = new Font("宋体", Font.BOLD, 20);  

            //创建柱状图,柱状图分水平显示和垂直显示两种  

            JFreeChart chart = ChartFactory.createBarChart("前三季度各大公司JEEAS市场销售情况", "季度", "销量(万台)", ds, PlotOrientation.VERTICAL, true, true, true);  

   

            //设置整个图片的标题字体  

            chart.getTitle().setFont(font);  

   

            //设置提示条字体  

            font = new Font("宋体", Font.BOLD, 15);  

            chart.getLegend().setItemFont(font);  

   

            //得到绘图区  

            CategoryPlot plot = (CategoryPlot) chart.getPlot();  

            //得到绘图区的域轴(横轴),设置标签的字体  

            plot.getDomainAxis().setLabelFont(font);  

   

            //设置横轴标签项字体  

            plot.getDomainAxis().setTickLabelFont(font);  

   

            //设置范围轴(纵轴)字体  

            plot.getRangeAxis().setLabelFont(font);  

            //存储成图片  

   

            //设置chart的背景图片  

            chart.setBackgroundImage(ImageIO.read(new File("d:/sunset.bmp")));  

   

            plot.setBackgroundImage(ImageIO.read(new File("d:/Water.jpg")));  

   

            plot.setForegroundAlpha(1.0f);  

   

            ChartUtilities.saveChartAsJPEG(new File("d:/bar.jpg"), chart, 600, 400);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

平面2D效果:

image

柱状图默认的ForegroundAlpha属性值是0.5,半透明的.创建3D柱状图只需要使用createBarChart3D()这个方法即可:

image

生成拆线图:


package cn.zhangao.jfreechart;  

   

import java.awt.Font;  

import java.io.File;  

   

import javax.imageio.ImageIO;  

   

import org.jfree.chart.ChartFactory;  

import org.jfree.chart.ChartUtilities;  

import org.jfree.chart.JFreeChart;  

import org.jfree.chart.plot.CategoryPlot;  

import org.jfree.chart.plot.PlotOrientation;  

import org.jfree.data.category.DefaultCategoryDataset;  

   

public class AppLine {  

    public static void main(String[] args) {  

        try {  

            //种类数据集  

            DefaultCategoryDataset ds = new DefaultCategoryDataset();  

            ds.setValue(100, "ibm", "第一季度");  

            ds.setValue(200, "ibm", "第二季度");  

            ds.setValue(600, "ibm", "第三季度");  

   

            ds.setValue(500, "google", "第一季度");  

            ds.setValue(333, "google", "第二季度");  

            ds.setValue(780, "google", "第三季度");  

   

            ds.setValue(600, "用友", "第一季度");  

            ds.setValue(1500, "用友", "第二季度");  

            ds.setValue(300, "用友", "第三季度");  

   

            Font font = new Font("宋体", Font.BOLD, 20);  

            //创建柱状图  

            JFreeChart chart = ChartFactory.createLineChart("前三季度各大公司JEEAS市场销售情况", "季度", "销量(万台)", ds, PlotOrientation.VERTICAL, true, true, true);  

   

            //设置整个图片的标题字体  

            chart.getTitle().setFont(font);  

   

            //设置提示条字体  

            font = new Font("宋体", Font.BOLD, 15);  

            chart.getLegend().setItemFont(font);  

   

            //得到绘图区  

            CategoryPlot plot = (CategoryPlot) chart.getPlot();  

            //得到绘图区的域轴(横轴),设置标签的字体  

            plot.getDomainAxis().setLabelFont(font);  

   

            //设置横轴标签项字体  

            plot.getDomainAxis().setTickLabelFont(font);  

   

            //设置范围轴(纵轴)字体  

            plot.getRangeAxis().setLabelFont(font);  

            //存储成图片  

            //设置chart的背景图片  

            chart.setBackgroundImage(ImageIO.read(new File("d:/sunset.bmp")));  

   

            plot.setBackgroundImage(ImageIO.read(new File("d:/Water.jpg")));  

   

            plot.setForegroundAlpha(1.0f);  

            ChartUtilities.saveChartAsJPEG(new File("d:/line.jpg"), chart, 600, 400);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}  

平面2D效果:

image

同样只需要使用createLineChart3D()方法创建3D拆线图,效果:

image

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用JFreeChart 生成报表 的相关文章

  • 学成在线--day03 CMS页面管理开发

    学成在线 第3天 讲义 CMS页面管理开发 1 自定义条件 1 1 需求分析 在页面输入查询条件 xff0c 查询符合条件的页面信息 查询条件如下 xff1a 站点Id xff1a 精确匹配 模板Id xff1a 精确匹配 页面别名 xff
  • Ubuntu下安装Inode后双击InodeClient无反映解决方法

    由于比较喜好linux编程环境 xff0c 所以准本一直使用linux 学校无线有时有有时没很不爽 xff0c 所以准本安装Inode xff0c 但是安装完Inode后双击是一直没反映 最后求助万能的百度 xff0c 谁知道百度的搜索不得
  • 使用GitHub托管网站,自定义域名

    1 如何使用GitHub托管 官网链接 xff1a 点击跳转 官网首页就有详细的搭建步骤 xff0c 总共5步便可搭建成功 访问 github用户名 github io 便可看到自己的网站 2 自定义域名的方法 1 申请一个域名 xff0c
  • ElasticsearchRestTemplate 基本使用

    随着数据量的增加和数据结构的复杂化 xff0c 传统的关系型数据库已经不能满足用户的需求 xff0c 而搜索引擎则成为了一种更加高效 可扩展的数据检索方案 而 Elasticsearch 则是一个流行的搜索引擎 xff0c 在 Java 生
  • Navcat无法连接mysql报错1449

    把mysql从5升级成8后第二次连接mysql就报错1449 不清楚什么原因 xff0c 反正肯定是升级数据库之后mysql用户被动了 xff0c 看了很多博客都没有用 xff0c 什么在navcat里新建用户 xff0c 数据库都连不上怎
  • Kafka —— java实现一生产者多消费者实例

    架构图 xff1a xff08 网图 xff0c 很通俗易懂了 xff0c 就不自己画了 xff0c 这里实现的是一个Producer 两个Consumer xff09 前提 xff1a 已经开启zookeeper 和kafka xff0c
  • 程序员玩游戏之三--天天爱消除非暴力脚本

    评论 xff1a 此款游戏成功在其好友排名上 好友的分数超过了你无疑会增加你的斗志 中级策略 xff1a 七手八脚多人一起点 这相当于多个CPU处理一个大任务了 xff0c 哈哈 终极策略 xff1a 自动化 机器总是比人快的多 你两个人一
  • 程序员玩游戏之四--娱网棋牌大连打滚子记牌器

    话说大连人都爱打滚子 xff0c 所以本人就做了一个打滚子记牌器 基本原理同 程序员玩游戏之一 自动对对碰 xff0c 故此处不再赘述 xff0c 只留下一张截图吧 代码请见资源地址 xff1a http download csdn net
  • 为SIGSEGV设置handler有用吗?

    背景 最近几天看到先辈们30年前留下了一块代码 xff0c 为SIGSEGV设置了handler xff0c 所以心中有了两个疑问 xff1a 为SIGSEGV设置handler有没有用 xff1f 能否跳过引起崩溃的那一句指令 xff1f
  • GDB调试技巧实战--为优化版release版本的函数寻找参数值

    在上一篇 GDB调试技巧实战 为release版本的函数寻找参数值 中 xff0c 我们探讨了一种为函数找参数的办法 xff0c 但是 xff0c 那是最理想的情况 编译时没有使用 fomit frame pointer 编译时没有开启优化
  • 通过实例了解uprobe及其对性能的影响

    前言 uprobe是用户空间探针的意思 xff0c 可以用来给用户程序的任何地方下探针 xff0c 不仅仅是函数粒度层级的 所以异常灵活 如果不熟悉ftrace uprobe 可参考以下文档 xff1a https www kernel o
  • bpftrace各维度捕捉SIGKILL信号

    一 问题 Ftrace 几乎适配任何主流内核版本 xff09 和 bpftrace xff08 要求内核版本4 1以上 xff09 中都有两个现成的脚本execsnoop bt killsnoop bt 我经常用他们从外部 xff08 不去
  • 图形化VS201x工程中的项目依赖关系

    目录 1 背景 2 入手 2 1 分析sln文件 2 2 给出正则表达式 3 程序 4 demo 5 补充 另外一种情况 6 补充 完整代码 1 背景 初次接手一个大工程时 往往因为复杂的项目依赖而遇到各种编译问题 同时如果能图形化其中的依
  • 深入应用python关键字yield--实现任务调度

    在此假设读者了解yield关键字的基本用法 如不了解请参照python文档或google之 大家知道遇到yield关键字时python会把当前的环境 xff0c 比如局部变量 全局变量等 xff0c 给记录下来以便以后能正确的继续向下运行
  • 刘慈欣(三体作者)写给200年以后的女儿的一封信

    原文地址 xff1a http blog sina com cn s blog 540d5e800101lcsb html 亲爱的女儿 xff0c 你好 xff01 这是一封你可能永远收不到的信 xff0c 我将把这封信保存到银行的保险箱中
  • 程序员玩游戏之二--篡改植物大战僵尸2的阳光值

    植物大战僵尸1几年前曾经风靡一时 xff0c 妇孺皆知 xff01 其续作奇幻时空之旅千呼万唤始出来 xff0c 不过从首发到目前都1月有余 xff0c 本人竟然还没玩过 于是昨晚下载了一个汉化版 本人系统为IOS5 0 1 xff0c a
  • 设计模式:生产者消费者模式

    在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题 该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度 为什么要使用生产者和消费者模式 xff1f 在线程世界里 xff0c 生产者就是生产数据的线程 xff0c
  • activemq 应用实践——queue

    首先创建发送端程序SenderTestBase和接收端程序ReceiveTestBase 发送端 xff1a SenderTestBase java package test import java util Date import jav
  • swig包装c++步骤

    使用Swig封装C 43 43 到Python的心得 01 收藏 一 xff0e 简述 前一段时间由于工作需要重点学习了一下用Swig来封装C 43 43 代码到Python的知识 xff0c 期间遇到一些问题 xff0c 也有一些心得体会
  • PS CC2019 安装过程中遇到 Command line option syntax error. Type Command /? for Help.

    背景前言 昨天买了一块高漫WH850 的数位板 手绘板 板子都买了 肯定要安装PSCC 2019 了 但是在安装过程中遇到一个问题 那就是Command line option syntax error Type Command for H

随机推荐

  • 【上传】Nginx 上传文件

    本文包含知识点 xff1a 1 nginx服务搭建 2 nginx文件上传模块搭建 3 文件重命名服务搭建 3 nginx整体配置 4 测试 引言 一般可以应用在上传不是跟频繁的场景 xff0c 都可以采用Nginx上传文件 我们都知道 x
  • 推荐一些非常非常实用的linux命令(持续更)

    终生学习是我追求的目标 1 通过yum命令只下载rpm软件包但不安装 PS xff1a 适合在没有外网的情况下自制本地yum源 xff0c 前提是先做好镜像 方法一 xff1a yumdownloader 如果只想通过 yum 下载软件的软
  • Android 根据打包环境不同,显示不同的应用名称

    可以动态的设置应用名称和应用图标 1 在app的buid gradle中设置resValue 值 productFlavors span class token punctuation span dev span class token p
  • springboot整合guava实现本地缓存

    springboot整合guava实现本地缓存 一 Springboot缓存 SpringBoot支持很多种缓存方式 xff1a redis guava ehcahe jcache等等 二 guava介绍 Guava Cache 是 Goo
  • Java 中如何使用枚举来消除 if/else

    今天 xff0c 准备重新学习一下 Java 中的枚举类型 为什么现在要去重新学习呐 xff1f 因为在刚开始学习 Java 的时候 xff0c 对于枚举这一块的学习不太重视 xff0c 工作之后发现用到枚举的地方挺多的 xff0c 就有了
  • Lottie- 让Android动画实现更简单

    Lottie是什么 xff1f Lottie是Airbnb开源的一个支持 Android iOS 以及 ReactNative xff0c 利用json文件的方式快速实现动画效果的库 这么看可能很难理解 xff0c 接下来我将详细的讲解如何
  • 使用HC05蓝牙模块实现数据无线传输,看完包会

    由于需要将单片机采集到的数据无线传输到上位机 xff0c 考虑到成本原因 xff0c 故采用HC05蓝牙模块进行数据传输 一 开发工具 单片机 两块HC05蓝牙模块 一个USB转TTL模块 xff0c 电脑上安装串口调试软件 xff08 推
  • 【路径规划】(4) 蚁群算法,附python完整代码

    大家好 xff0c 今天和各位分享一下蚁群算法 xff0c 并基于 tkinter 完成一个旅行商问题 完整代码可以从我的 GitHub 中获得 xff1a https github com LiSir HIT Mathematical P
  • 利用Jekyll在GitHub Pages上部署博客

    开始之前 我觉得阮一峰的 搭建一个免费的 xff0c 无限流量的Blog github Pages和Jekyll入门 是一个很经典的入门 xff0c 每个Jekyll初学者都应该先去看一看 xff0c 另外 GitHub Pages官网以及
  • CSDN博客导出工具 Mac By Swift

    写这个的目的主要是用于了解Swift语言本身 xff0c 以及如何与Objc和第三方框架交互 需要先使用CSDN账号来登录 xff0c 可以导出所有的博客文章 xff0c 添加YAML头信息的时候 xff0c 会在头信息里面包含文章对应的标
  • 如何避免在Block里用self造成循环引用

    一般来说我们总会在设置Block之后 xff0c 在合适的时间回调Block xff0c 而不希望回调Block的时候Block已经被释放了 xff0c 所以我们需要对Block进行copy xff0c copy到堆中 xff0c 以便后用
  • Xcode及模拟器SDK下载

    现在不会有人想在 Xcode 里安装旧版的模拟器了 xff0c 本篇不再维护 如果你嫌在 App Store 下载 Xcode 太慢 xff0c 你也可以选择从网络上下载 xff1a Xcode下载 xff08 Beta版打的包是不能提交到
  • Mac下最好用的文本编辑器

    友情提醒 xff1a 图多杀猫 以前在Windows下一直用gVim xff0c 可以用键盘控制一切 xff0c 操作起来是又快又爽 xff0c 还支持一大堆插件 xff0c 想怎么玩就怎么玩 后来转Mac后 xff0c 也沿袭着之前的习惯
  • iOS8 Core Image In Swift:更复杂的滤镜

    iOS8 Core Image In Swift xff1a 自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift xff1a 更复杂的滤镜 iOS8 Core Image In Swift xff1a 人脸检测
  • 使用CocoaPods过程中的几个问题

    当把CocoaPods生成的workspace移动到上层目录时 xff0c 需要改下Pods xcconfig和工程里的一些设置 xff0c 就通常没什么难度 当遇到这个问题时 xff1a Could not automatically s
  • 仿网易云音乐的播放进度条

    仿网易云音乐的播放进度条 xff0c 有三种状态 xff1a 播放 暂停和拖动 xff0c 只是实现了动画和主要的交互逻辑 xff0c 其他细节 xff08 如暂停音乐的播放等 xff09 还需要自己完善 xff1a DKPlayerBar
  • 用 Houston 在本地调试远程通知

    Houston 的背景 Houston 在 GitHub 上的地址 xff1a https github com nomad Houston xff0c 作者又是Mattt Thompson xff0c 简直是惨无人道啊 xff0c 又高产
  • 如何设计一个 iOS 控件?(iOS 控件完全解析)

    代码的等级 xff1a 可编译 可运行 可测试 可读 可维护 可复用 前言 一个控件从外在特征来说 xff0c 主要是封装这几点 xff1a 交互方式显示样式数据使用 对外在特征的封装 xff0c 能让我们在多种环境下达到 PM 对产品的要
  • 蛋花花分享人工智能概念的诞生与发展

    蛋花花分享人工智能概念的诞生与发展 xff01 如今人工智能非常的火 xff0c 在各行各业都有突出的变现 xff0c 让人期待它未来的发展 蛋花花认为了解人工智能向何处去 xff0c 首先要知道人工智能从何处来 1956年夏 xff0c
  • 用JFreeChart 生成报表

    JFreeChart是JAVA平台上的一个开放的图表绘制类库 它完全使用JAVA语言编写 xff0c 是为applications applets servlets 以及JSP等使用所设计 JFreeChart可生成饼图 xff08 pie