文档章节

Java——使用JFreechart创建报表

哎那个新来的
 哎那个新来的
发布于 2016/08/08 14:12
字数 1091
阅读 12
收藏 0

1、柱状图

Servlet:

package mytest.pie;
import java.awt.Font;
import java.io.IOException;
import java.text.NumberFormat;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class MyPieChart3 {

    public static String  getPieChart(HttpSession session) throws IOException{
        //创建数据
        DefaultPieDataset data = new DefaultPieDataset();
        data.setValue("美国", 1000);
        data.setValue("俄罗斯", 800);
        data.setValue("中国", 700);
        data.setValue("日本", 680);
        data.setValue("欧盟", 1200);
        data.setValue("其他", 500);
        //创建chart
        JFreeChart chart = ChartFactory.createPieChart("奥运会", data, true, true, true);
        //副标题
        chart.addSubtitle(new TextTitle("2016奥运会"));
        //创建piePlot 对象
        PiePlot piePlot = (PiePlot)chart.getPlot();
        //设置字体
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true  
        piePlot.setCircular(true);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");
        //设置百分比
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:{2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());  
        piePlot.setLabelGenerator(standarPieIG);  
        
        //设置3D的piePlot对象
        PiePlot3D pieplot3d = (PiePlot3D)chart.getPlot();
        //设置开始角度  
        pieplot3d.setStartAngle(120D);  
        //设置方向为”顺时针方向“  
        pieplot3d.setDirection(Rotation.CLOCKWISE);  
        //设置透明度,0.5F为半透明,1为不透明,0为全透明  
        pieplot3d.setForegroundAlpha(0.7F);
        
        //保存chart,并且返回文件名称
        String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);
        return fileName;
    }
}

jsp:

<%@page import="mytest.bar.BarChart4"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 //从session中获取等生成的图片你的文件名称
 String fileName = BarChart4.getStringBarChart(session);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'MBarChar.jsp' starting page</title>
  </head>
 
  <body>
        <img src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0">
  </body>
</html>

2、饼状图

Servelt:

package mytest.pie;
import java.awt.Font;
import java.io.IOException;
import java.text.NumberFormat;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class MyPieChart3 {

    public static String  getPieChart(HttpSession session) throws IOException{
        //创建数据
        DefaultPieDataset data = new DefaultPieDataset();
        data.setValue("美国", 1000);
        data.setValue("俄罗斯", 800);
        data.setValue("中国", 700);
        data.setValue("日本", 680);
        data.setValue("欧盟", 1200);
        data.setValue("其他", 500);
        //创建chart
        JFreeChart chart = ChartFactory.createPieChart("奥运会", data, true, true, true);
        //副标题
        chart.addSubtitle(new TextTitle("2016奥运会"));
        //创建piePlot 对象
        PiePlot piePlot = (PiePlot)chart.getPlot();
        //设置字体
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true  
        piePlot.setCircular(true);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");
        //设置百分比
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:{2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());  
        piePlot.setLabelGenerator(standarPieIG);  
        
        //设置3D的piePlot对象
        PiePlot3D pieplot3d = (PiePlot3D)chart.getPlot();
        //设置开始角度  
        pieplot3d.setStartAngle(120D);  
        //设置方向为”顺时针方向“  
        pieplot3d.setDirection(Rotation.CLOCKWISE);  
        //设置透明度,0.5F为半透明,1为不透明,0为全透明  
        pieplot3d.setForegroundAlpha(0.7F);
        
        //保存chart,并且返回文件名称
        String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);
        return fileName;
    }
}

Jsp:

<%@ page language="java" import="java.util.*,mytest.pie.MyPieChart3" pageEncoding="UTF-8"%>
<%
String fileName = MyPieChart3.getPieChart(session);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
 
  <body>
    <img alt="奥运会奖牌分布" src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0" />
  </body>
</html>

3、折线图

Servelt:

package mytest.line;

import java.awt.Font;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.TextAnchor;
//多条折线
public class MyLineChart2 {
    
    public static String getLineChart(HttpSession session) throws IOException{
        // 访问量统计
            TimeSeries timeSeries=new TimeSeries("A网站访问量统计", Month.class);
            // 添加数据
            timeSeries.add(new Month(1,2013), 100);
            timeSeries.add(new Month(2,2013), 200);
            timeSeries.add(new Month(3,2013), 300);
            timeSeries.add(new Month(4,2013), 400);
            timeSeries.add(new Month(5,2013), 560);
            timeSeries.add(new Month(6,2013), 600);
            timeSeries.add(new Month(7,2013), 750);
            timeSeries.add(new Month(8,2013), 890);
            timeSeries.add(new Month(9,2013), 120);
            timeSeries.add(new Month(10,2013), 400);
            timeSeries.add(new Month(11,2013), 1200);
            timeSeries.add(new Month(12,2013), 1600);
            
            // 访问量统计
            TimeSeries timeSeries2=new TimeSeries("B网站访问量统计", Month.class);
            // 添加数据
            timeSeries2.add(new Month(1,2013), 50);
            timeSeries2.add(new Month(2,2013), 100);
            timeSeries2.add(new Month(3,2013), 150);
            timeSeries2.add(new Month(4,2013), 200);
            timeSeries2.add(new Month(5,2013), 220);
            timeSeries2.add(new Month(6,2013), 300);
            timeSeries2.add(new Month(7,2013), 340);
            timeSeries2.add(new Month(8,2013), 400);
            timeSeries2.add(new Month(9,2013), 450);
            timeSeries2.add(new Month(10,2013), 500);
            timeSeries2.add(new Month(11,2013), 70);
            timeSeries2.add(new Month(12,2013), 800);
            
            // 定义时间序列的集合
            TimeSeriesCollection lineDataset=new TimeSeriesCollection();
            lineDataset.addSeries(timeSeries);
            lineDataset.addSeries(timeSeries2);
            
            JFreeChart chart=ChartFactory.createTimeSeriesChart("访问量统计时间折线图", "月份", "访问量", lineDataset, true, true, true);
            
            //设置主标题
            chart.setTitle(new TextTitle("A,B网站访问量统计对比图", new Font("隶书", Font.ITALIC, 15)));
            //设置子标题
            TextTitle subtitle = new TextTitle("2013年度", new Font("黑体", Font.BOLD, 12));
            chart.addSubtitle(subtitle);
            chart.setAntiAlias(true);
            
            //获取XYPlot对象,通过该对象设置其他的属性值
            XYPlot plot = (XYPlot) chart.getPlot();
            //设置时间轴的范围。
            DateAxis dateaxis = (DateAxis)plot.getDomainAxis();
            dateaxis.setDateFormatOverride(new java.text.SimpleDateFormat("M月"));
            dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH,1));
            
            //设置曲线是否显示数据点
            XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer)plot.getRenderer();
            xylinerenderer.setBaseShapesVisible(true);
            
            //设置曲线显示各数据点的值
            XYItemRenderer xyitem = plot.getRenderer();
            xyitem.setBaseItemLabelsVisible(true);
            xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
            xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
            xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 12));
            plot.setRenderer(xyitem);
            
            String fileName=ServletUtilities.saveChartAsPNG(chart, 700, 500, session);
            
            return fileName;
    }
}

Jsp:

<%@ page language="java" import="java.util.*,mytest.line.*" pageEncoding="UTF-8"%>
<%
String fileName = MyLineChart2.getLineChart(session);

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
 

  </head>
 
  <body>
    <img alt="访问统计折线图" src="/DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0" />
  </body>
</html>

© 著作权归作者所有

共有 人打赏支持
哎那个新来的
粉丝 0
博文 92
码字总数 29196
作品 0
闸北
程序员
Web图表开发工具JFreeChart与ChartDirector使用评测

在Web开发中,图形和图表是常用的数据呈现方式,图表能将枯燥的数据生动的表现出来。也许你正接手一个Web图表开发项目,却被Web图表开发工具选型的问题困扰着,要么是价格昂贵,要么就是部署...

咲晚杍
2013/08/21
0
0
使用JFreeChart实现基于Web的柱状图

JFreeChart是一组功能强大、灵活易用的 Java绘图 API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图等。它能够用在 Swing和 Web等中制作自定义的图表或报表,并且得到广泛的应...

harries
2014/06/05
0
4
35款免费的 Javascript Flash Web 图表

Flot - Flot 为 jQuery 提供的javascript代码库. 容易使用,有特色的图表,提供交互功能(能够放大缩小数据区域等)。 Open Flash Chart - Open Flash Chart 是一个 Flash 图表组件,很容易安装...

SeanCai
2011/10/11
0
0
通过鼠标拖动来修改JFreeChart序列值

通过鼠标拖动来修改JFreeChart序列值 最近因一个应用的需要,要通过鼠标的拖动来修改序列的值,在网上查了好多资料,都没有找到好的实现,在CSDN也有不少这方面的询问贴子。在参考网上前人资...

郭先生
2010/11/26
0
2
JfreeChart使用经验总结(分析了使用中碰到的一些常见问题)

jfreechart使用经验总结(针对版本:jfreechart-1.0.0-pre2.zip) 问题一:在每次生成jfreechar图片的时候都会抛出异常,异常指出问题出在ChartFactory.createXYLineChart(picName, "时间轴", ...

梦想生活
2013/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Oracle return exit continue

常在循环体中看到下面3种语句: return exit continue 举例说明 啥都没有 -- none begin for i in 1 .. 10 loop if i < 5 then dbms_output.put_line('i < 5, i = ' || to_char......

taadis
58分钟前
2
0
JSONObject 转换时出错 InvocationTargetException

JSONObject 转换时出错java.lang.reflect.InvocationTargetException 一时看不出来是什么问题。 挺奇怪的。 百度参考了一下这个 网页的解决方案 说是类型不对,空? 仔细查看代码,果然是有一...

之渊
今天
3
0
no such module 'pop'问题

在github上 clone 了一个 swift 项目,编译时提示"no such module 'POP'"错误,查了一下居然是因为podfile中指定的最低版本是iOS 11.0,大于我测试手机的iOS版本10.3.3,将Podfile中的最低版...

yoyoso
今天
3
0
redis 系列一 -- 简介及安装

1.简介 redis -- remote dictionary server 远程字典服务 使用 C 语言编写; 高性能的 key-value数据库; 内存数据库,支持数据持久化。 Redis 是一个开源(BSD许可)的,内存中的数据结构存...

imbiao
今天
4
0
nginx log记录请求响应时间

有时为了方便分析接口性能等,需要记录请求的时长,通过修改nginx的日志格式可以做到,如 添加一个新的log_format log_format timed_combined '$remote_addr - $remote_user [$time_local] "...

swingcoder
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部