《Java报表之JFreeChart》第四讲

来源:互联网 发布:网络上的占豪是谁啊 编辑:程序博客网 时间:2024/05/21 21:39

1.TimeSeries,TimeSeriesCollection 引入

package com.xp.chart.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;/** * 折线图实例 * @author xiongpan001 */public class LineChart1 {public static String getLineChart(HttpSession session) throws Exception {//创建一个时间序列并且设置报表标题为2016年网站访问量统计TimeSeries timeSeries=new TimeSeries("2016年武汉气温变化情况统计图",  Month.class);//往折线图序列添加数据timeSeries.add(new Month(1,2016),23);timeSeries.add(new Month(2,2016),28);timeSeries.add(new Month(3,2016),29);timeSeries.add(new Month(4,2016),30);timeSeries.add(new Month(5,2016),29);timeSeries.add(new Month(6,2016),30);timeSeries.add(new Month(7,2016),33);timeSeries.add(new Month(8,2016),34);timeSeries.add(new Month(9,2016),23);timeSeries.add(new Month(10,2016),12);timeSeries.add(new Month(11,2016),17);timeSeries.add(new Month(12,2016),23);// 定义时间序列的集合TimeSeriesCollection lineDataset= new TimeSeriesCollection();lineDataset.addSeries(timeSeries);JFreeChart chart = ChartFactory.createTimeSeriesChart("气温变化趋势折线图","月份", "气温", lineDataset, true, true, true);// 设置主标题chart.setTitle(new TextTitle("气温变化趋势折线图",new Font("楷书", Font.ITALIC, 16)));// 设置子标题TextTitle subtitle = new TextTitle("2016年度", new Font("微软雅黑", Font.BOLD,12));chart.addSubtitle(subtitle);chart.setAntiAlias(true);// 设置时间轴的范围。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;}}

2.创建折线图页面,代码如下

<%@page import="com.xp.chart.line.LineChart1"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%String fileName=LineChart1.getLineChart(session);System.out.println(fileName);%><img src="DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0"/></body></html>

3.显示折线图如下


2.利用JFreeChart创建多重折线图报表

package com.xp.chart.line;import java.awt.Font;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 LineChart2 {public static String genLineChart(HttpSession session)throws Exception{// 访问量统计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.BOLD, 15))); //设置子标题TextTitle subtitle = new TextTitle("2013年度", new Font("微软雅黑", Font.BOLD, 12));chart.addSubtitle(subtitle); chart.setAntiAlias(true); //设置时间轴的范围。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;}}

创建页面代码如下

<%@page import="com.xp.chart.line.LineChart2"%><%@page import="com.xp.chart.line.LineChart1"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%String fileName=LineChart2.genLineChart(session);System.out.println(fileName);%><img src="DisplayChart?filename=<%=fileName %>" width="700" height="500" border="0"/></body></html>
3.显示的双重折线图如图所示





0 0