图表jfreechart的简介

2024-06-14 16:48
文章标签 jfreechart 图表 简介

本文主要是介绍图表jfreechart的简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 简介:JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
  • 特点:稳定、轻量级且功能强大;免费开源;简单易操作。
  • 缺点:缺乏灵活性、代码量大、类及接口较多需要长时间研究、不能是实现数据分离。
  • 案例:
    package com.wasu.itv.common.util;   import java.awt.BasicStroke;   
    import java.awt.Color;   
    import java.awt.Font;   
    import java.io.FileOutputStream;   
    import java.io.IOException;   
    import java.text.DecimalFormat;   
    import java.text.NumberFormat;   
    import java.util.Iterator;   
    import java.util.List;   import javax.servlet.http.HttpServletRequest;   import org.jfree.chart.ChartFactory;   
    import org.jfree.chart.ChartUtilities;   
    import org.jfree.chart.JFreeChart;   
    import org.jfree.chart.axis.CategoryAxis;   
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;   
    import org.jfree.chart.labels.StandardPieSectionLabelGenerator;   
    import org.jfree.chart.labels.StandardPieToolTipGenerator;   
    import org.jfree.chart.plot.CategoryPlot;   
    import org.jfree.chart.plot.PiePlot;   
    import org.jfree.chart.plot.PlotOrientation;   
    import org.jfree.chart.renderer.category.BarRenderer;   
    import org.jfree.chart.title.LegendTitle;   
    import org.jfree.chart.title.TextTitle;   
    import org.jfree.data.category.CategoryDataset;   
    import org.jfree.data.category.DefaultCategoryDataset;   
    import org.jfree.data.general.DefaultPieDataset;   
    import org.jfree.util.Rotation;   public class JFreeChartUtils {   public static boolean generatePieChart(List<Object[]> data, String title,   int width, int heigth, HttpServletRequest request,boolean is3D) {   boolean returnValue = false;   DefaultPieDataset dataset = new DefaultPieDataset();   for (Iterator<Object[]> iterator = data.iterator(); iterator.hasNext();) {   Object[] o = (Object[]) iterator.next();   dataset.setValue(o[0].toString(), ((Long) o[1]).doubleValue());   }   JFreeChart chart = createPieChart(dataset, title,is3D);   returnValue = drawToOutputStream(request.getSession()   .getServletContext().getRealPath("/")   + "/images/itv/statistical.jpg", chart, width, heigth);   return returnValue;   }   /**  * step2:创建PieChart图表  *   * @param dataset  * @return  */  private static JFreeChart createPieChart(DefaultPieDataset dataset,   String title,boolean is3D) {   JFreeChart chart=null;   if(is3D){   chart=ChartFactory.createPieChart3D(   title, // 图表标题   dataset, // 数据集   true, // 是否显示图例   true, // 是否显示工具提示   true // 是否生成URL   );   }   else{ chart = ChartFactory.createPieChart(   title, // 图表标题   dataset, // 数据集   true, // 是否显示图例   true, // 是否显示工具提示   true // 是否生成URL   );   }   // 设置标题字体==为了防止中文乱码:必须设置字体   chart.setTitle(new TextTitle(title, new Font("黑体", Font.ITALIC, 22)));   // 设置图例的字体==为了防止中文乱码:必须设置字体   chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12));   // 获取饼图的Plot对象(实际图表)   PiePlot plot = (PiePlot) chart.getPlot();   // 图形边框颜色   plot.setBaseSectionOutlinePaint(Color.GRAY);   // 图形边框粗细   plot.setBaseSectionOutlineStroke(new BasicStroke(0.0f));   // 设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制   plot.setDirection(Rotation.ANTICLOCKWISE);   // 设置绘制角度(图形旋转角度)   plot.setStartAngle(70);   // 设置突出显示的数据块   // plot.setExplodePercent("One", 0.1D);   // 设置背景色透明度   plot.setBackgroundAlpha(0.7F);   // 设置前景色透明度   plot.setForegroundAlpha(0.65F);   // 设置区块标签的字体==为了防止中文乱码:必须设置字体   plot.setLabelFont(new Font("宋体", Font.PLAIN, 12));   // 扇区分离显示,对3D图不起效   if(is3D)   plot.setExplodePercent(dataset.getKey(3), 0.1D);   // 图例显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位   plot.setLabelGenerator(new StandardPieSectionLabelGenerator(   "{0}:{1}\r\n({2})", NumberFormat.getNumberInstance(),   new DecimalFormat("0.00%")));   // 图例显示百分比   // plot.setLegendLabelGenerator(new   // StandardPieSectionLabelGenerator("{0}={1}({2})"));   // 指定显示的饼图为:圆形(true) 还是椭圆形(false)   plot.setCircular(true);   // 没有数据的时候显示的内容   plot.setNoDataMessage("找不到可用数据...");   // 设置鼠标悬停提示   plot.setToolTipGenerator(new StandardPieToolTipGenerator());   // 设置热点链接   // plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp"));   return chart;   }   private static JFreeChart createBarChart(CategoryDataset dataset,   String title, String x, String y,boolean is3D) {   JFreeChart chart =null;   if(is3D){   chart = ChartFactory.createBarChart3D( // 3D柱状图   // JFreeChart chart = ChartFactory.createLineChart3D( //3D折线图   title, // 图表的标题   x, // 目录轴的显示标签   y, // 数值轴的显示标签   dataset, // 数据集   PlotOrientation.VERTICAL, // 图表方式:V垂直;H水平   true, // 是否显示图例   false, // 是否显示工具提示   false // 是否生成URL   );   }else{   chart = ChartFactory.createBarChart( // 柱状图   // JFreeChart chart = ChartFactory.createLineChart3D( //3D折线图   title, // 图表的标题   x, // 目录轴的显示标签   y, // 数值轴的显示标签   dataset, // 数据集   PlotOrientation.VERTICAL, // 图表方式:V垂直;H水平   true, // 是否显示图例   false, // 是否显示工具提示   false // 是否生成URL   );   }   // ===============为了防止中文乱码:必须设置字体   chart.setTitle(new TextTitle(title, new Font("黑体", Font.ITALIC, 22)));   LegendTitle legend = chart.getLegend(); // 获取图例   legend.setItemFont(new Font("宋体", Font.BOLD, 12)); // 设置图例的字体,防止中文乱码   CategoryPlot plot = (CategoryPlot) chart.getPlot(); // 获取柱图的Plot对象(实际图表)   // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)   plot.setBackgroundPaint(new Color(255, 255, 204));   plot.setForegroundAlpha(0.65F); // 设置前景色透明度   // 设置横虚线可见   plot.setRangeGridlinesVisible(true);   // 虚线色彩   plot.setRangeGridlinePaint(Color.gray);   CategoryAxis h = plot.getDomainAxis(); // 获取x轴   h.setMaximumCategoryLabelWidthRatio(1.0f);// 横轴上的 Lable 是否完整显示   h.setLabelFont(new Font("宋体", Font.BOLD, 12));// 设置字体,防止中文乱码   h.setTickLabelFont(new Font("宋体", Font.BOLD, 12));// 轴数值   // h.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//45度倾斜   plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 12)); // Y轴设置字体,防止中文乱码   // 柱图的呈现器   BarRenderer renderer = new BarRenderer();   // 设置柱子宽度   // renderer.setMaximumBarWidth(0.05);   // 设置柱子高度   // renderer.setMinimumBarLength(0.2);   // 设置柱子边框颜色   renderer.setBaseOutlinePaint(Color.BLACK);   // 设置柱子边框可见   renderer.setDrawBarOutline(true);   // 设置每个柱的颜色   renderer.setSeriesPaint(0, Color.BLUE);   renderer.setSeriesPaint(1, Color.GREEN);   renderer.setSeriesPaint(2, Color.RED);   // 设置每个地区所包含的平行柱的之间距离   renderer.setItemMargin(0.05);   // 显示每个柱的数值,并修改该数值的字体属性   renderer.setIncludeBaseInRange(true);   renderer   .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());   renderer.setBaseItemLabelsVisible(true);   // 设置柱的透明度   plot.setForegroundAlpha(1.0f);   // 给柱图添加呈现器   plot.setRenderer(renderer);   // 没有数据的时候显示的内容   plot.setNoDataMessage("找不到可用数据...");   return chart;   }   /**  *   * @param data  * @param title  * @param x  * @param y  * @param width  * @param heigth  * @param request  * @return  */  public static boolean generateBarChart(List<Object[]> data, String title,   String x, String y, int width, int heigth,boolean is3D,   HttpServletRequest request) {   boolean returnValue = false;   DefaultCategoryDataset dataset = new DefaultCategoryDataset();   for (Iterator<Object[]> iterator = data.iterator(); iterator.hasNext();) {   Object[] o = (Object[]) iterator.next();   dataset.setValue(((Integer) o[1]).intValue(), o[0] + ":" + o[1],   o[2].toString());   }   JFreeChart chart = createBarChart(dataset, title, x, y,is3D);   returnValue = drawToOutputStream(request.getSession()   .getServletContext().getRealPath("/")   + "/images/itv/statistical.jpg", chart, width, heigth);   return returnValue;   }   /**  * step3: 输出图表到指定的磁盘  *   * @param destPath  * @param chart  */  private static boolean drawToOutputStream(String destPath,   JFreeChart chart, int width, int heigth) {   FileOutputStream fos = null;   boolean returnValue = true;   try {   fos = new FileOutputStream(destPath);   ChartUtilities.writeChartAsPNG(fos, // 指定目标输出流   chart, // 图表对象   width, // 宽   heigth, // 高   null); // ChartRenderingInfo信息   } catch (IOException e) {   e.printStackTrace();   returnValue = false;   } finally {   try {   fos.close();   } catch (IOException e) {   e.printStackTrace();   }   }   return returnValue;   }   /**  * @param args  */  public static void main(String[] args) {   CategoryDataset  dataset = createBarDataSet2();   JFreeChart chart=createBarChart(dataset, "111111111111111", "2222222", "2222222",true);   drawToOutputStream("D:\\mybook-pie.png", chart, 640, 480);   }   private static DefaultPieDataset createPieDataSet1() {   DefaultPieDataset dataset = new DefaultPieDataset();   dataset.setValue("java程序设计语言", 10000);   dataset.setValue("JSP基础与案例开发详解", 20000);   dataset.setValue("struts基础与案例开发详解", 30000);   dataset.setValue("精通JSF", 40000);   return dataset;   }   private static DefaultPieDataset createPieDataSet2() {   DefaultPieDataset dataset = new DefaultPieDataset();   dataset.setValue(" 市场前期", new Double(10));   dataset.setValue(" 立项", new Double(15));   dataset.setValue(" 计划", new Double(10));   dataset.setValue(" 需求与设计", new Double(10));   dataset.setValue(" 执行控制", new Double(35));   dataset.setValue(" 收尾", new Double(10));   dataset.setValue(" 运维", new Double(10));   return dataset;   }   /**  * step1:创建 简单数据集对象  *   * @return  */  private static CategoryDataset createBarDataSet1() {   DefaultCategoryDataset dataset = new DefaultCategoryDataset();   dataset.setValue(10000, "", "Corejava");   dataset.setValue(20000, "", "JavaWeb");   dataset.setValue(30000, "", "易用struts");   dataset.setValue(40000, "", "精通JSF");   return dataset;   }   /**  * 组合数据集对象  *   * @return  */  private static CategoryDataset createBarDataSet2() {   DefaultCategoryDataset dataset = new DefaultCategoryDataset();   dataset.setValue(5000, "北京", "Corejava");   dataset.setValue(3000, "上海", "Corejava");   dataset.setValue(2000, "广州", "Corejava");   dataset.setValue(10000, "北京", "JavaWeb");   dataset.setValue(6000, "上海", "JavaWeb");   dataset.setValue(4000, "广州", "JavaWeb");   dataset.setValue(15000, "北京", "易用struts");   dataset.setValue(5000, "上海", "易用struts");   dataset.setValue(10000, "广州", "易用struts");   dataset.setValue(20000, "北京", "精通JSF");   dataset.setValue(10000, "上海", "精通JSF");   dataset.setValue(10000, "广州", "精通JSF");   return dataset;   }   }  

这篇关于图表jfreechart的简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060963

相关文章

轻量级在线服装3D定制引擎Myway简介

我写的面向web元宇宙轻量级系列引擎中的另外一个,在线3D定制引擎Myway 3D。 用于在线商品定制,比如个性化服装的定制、日常用品(如杯子)、家装(被套)等物品的在线定制。 特性列表: 可更换衣服款式,按需定制更换模型可实时更改材质颜色可实时添加文本,并可实时修改大小、颜色和角度,支持自定义字体可实时添加艺术图标,并可实时修改大小、颜色和角度,支持翻转、各种对齐可更改衣服图案,按需求定制

如何利用echarts编写立体的柱状图表

1、引入 import * as echarts from 'echarts' 2、创建图标容器 3、调用渲染 <template><div ref="eachrtsBox" style="width: 200px;height: 200px;"></div></template><script>import * as echarts from 'echarts'export d

shader language学习(1)——shader language简介背景

shader language,称为着色语言,shade在英语是阴影、颜色深浅的意思。shader language基于物体本身属性和光照条件,计算美格橡塑的颜色值。 实际上这种解释具有明显的时代局限性,在GPU编程发展的早期,shader language的提出目标是加强对图形处理算法的控制,所以对该语言的定义也针对于此。但随着技术的进步,目前的shader language早已经用于通用计算

算法13—Bit Map算法简介

1. Bit Map算法简介          来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想         我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排

Zustand 状态管理库简介

1. Zustand 简介 Zustand(德语中意为“状态”)是一个使用简单 API 的 React 状态管理库。它的核心思想是以状态切片(slices)的方式组织应用状态,从而实现高效的状态管理。Zustand 提供了比 Redux 更加简洁和直接的用法,同时支持异步操作和中间件。 在React开发中,状态管理是一个非常重要的概念。虽然 React 提供了 useState 和 useRe

SpringCloud Config简介

简介 Spring Cloud Config为分布式系统的外部配置提供服务端(server)和客户端(client)的支持。Config服务端提供了一个集中的地方来管理所有环境下各个应用的配置,Config客户端即普通的Spring应用,但不局限于Spring应用,理论上任意应用都可以作为Config的客户端。Config服务端和客户端的概念都源自于Spring的Environment和Prop

常用加密算法之 RSA 简介及应用

引言 相关博文: Spring Boot 开发 – 常用加密算法简介(一)常用加密算法之 SM4 简介及应用 一、RSA算法简介 RSA (Rivest-Shamir-Adleman) 算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年发明。它基于大数质因数分解的困难性,提供了一种安全的数据加密和解密方法。 1. 密钥生成

腾讯Hardcoder-Android通讯框架简介

APP 的功能和业务特性不依赖于该框架。 总而言之,由于Hardcoder是腾讯主导的,所以我们不用太担心兼容性问题,腾讯会和手机厂商进行洽谈并提供解决方案,并且目前已经支持Hardcoder框架的手机厂商有OPPO、vivo、华为、小米、三星、魅族等。 Hardcoder 性能优化技术方案 Hardcoder 优化基础 Hardcoder 在Android系统侧主要优化的方法有提高 CP

「JCVI教程」JCVI的模块简介

JCVI的使用基本格式为python -m jcvi.模块.子功能 实际操作,因此了解JCVI的模块能够帮助我们去找到需要的功能。根据JCVI的源代码,我们可以知道它目前一共有10个模块,如下 algorithms: 算法模块 algorithms annotation: 注释模块 annotation assembly: 组装模块 assemb

MongoDB Map-Reduce 简介

MongoDB Map-Reduce 简介 MongoDB 是一个流行的 NoSQL 数据库,它使用文档存储数据,这些数据以 JSON 格式存储。MongoDB 提供了多种数据处理方法,其中 Map-Reduce 是一种用于批量处理和聚合数据的功能强大的工具。Map-Reduce 允许用户对大量数据进行自定义的聚合操作,适用于复杂的查询和数据转换任务。 Map-Reduce 的基本概念 Ma