图表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

相关文章

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async