《Java报表之JFreeChart》第四讲

    xiaoxiao2023-03-28  11

    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.显示的双重折线图如图所示

    转载请注明原文地址: https://ju.6miu.com/read-1210775.html
    最新回复(0)