JFreeChart开发Web图形报表(曲线图)

 曲线图可能是企业开发用得最多的图,它可以用来绘制趋势图、统计分析等。在开始编码前,让我们来看看与画曲线图密切相关的几个类:

    1)TimeSeriesCollection

     曲线数据的集合。

  2)TimeSeries

     曲线信息序列。

    3)  ChartFactory

    以利用该类的createTimeSeriesChart方法来创建曲线的JFreeChart对象。

 

 新建line1.jsp页面。代码如下:

<%@ page contentType="text/html;charset=GBK"%>

<%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart, org.jfree.chart.servlet.ServletUtilities,

org.jfree.chart.title.TextTitle, org.jfree.data.time.TimeSeries,

org.jfree.data.time.Month,org.jfree.chart.plot.XYPlot,

org.jfree.data.time.TimeSeriesCollection,java.awt.Font,

org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,

org.jfree.chart.renderer.xy.XYItemRenderer,

org.jfree.ui.RectangleInsets,

org.jfree.chart.labels.*,

org.jfree.ui.*,

org.jfree.chart.axis.*,java.util.*"%>

<% //访问量统计时间线 TimeSeries timeSeries = new TimeSeries("某网站访问量统计", Month.class); //时间曲线数据集合 TimeSeriesCollection lineDataset = new TimeSeriesCollection(); //构造数据集合 timeSeries.add(new Month(1, 2010), 1100); timeSeries.add(new Month(2, 2010), 1200); timeSeries.add(new Month(3, 2010), 1000); timeSeries.add(new Month(4, 2010), 900); timeSeries.add(new Month(5, 2010), 1000); timeSeries.add(new Month(6, 2010), 1200); timeSeries.add(new Month(7, 2010), 1300); timeSeries.add(new Month(8, 2010), 1400); timeSeries.add(new Month(9, 2010), 1200); timeSeries.add(new Month(10, 2010), 1500); timeSeries.add(new Month(11, 2010), 1600); timeSeries.add(new Month(12, 2010), 1300); lineDataset.addSeries(timeSeries); JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true); //设置主标题 chart.setTitle(new TextTitle("某网站访问量统计", new Font("隶书", Font.ITALIC, 15))); //设置子标题 TextTitle subtitle = new TextTitle("2010年度", 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)); Calendar date = Calendar.getInstance(); date.set(2009, 11, 1); Calendar mdate = Calendar.getInstance(); mdate.set(2010, 11, 30); dateaxis.setRange(date.getTime(),mdate.getTime()); //设置最大坐标范围 ValueAxis axis = plot.getRangeAxis() ; axis.setRange(800,1800) ; plot.setRangeAxis(axis); //设置曲线图与xy轴的距离 [上,左,下,右] plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 12D)); //设置曲线是否显示数据点 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, 500, 360, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %> <img src="<%= graphURL %>" width=500 height=360 border=0 >

 运行后的曲线效果如下图所示:

 

代码和柱状图和饼图都很像,上图是加的参数比较多。看官也可以修改其中的一些参数看看有什么变化。

PS:学习就是多实践。

上面的曲线图都是单曲线的,有时候我们对两个曲线进行比较,在此种情况下,我们只需要在多新建一个TimeSeries对象,给它添加数据后,将其添加到TimeSeriesCollection型数据集合对象中,代码如下:

 

<%@ page contentType="text/html;charset=GBK"%> <%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart, org.jfree.chart.servlet.ServletUtilities,org.jfree.chart.title.TextTitle,java.awt.Font, org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection"%> <% //时间曲线数据集合 TimeSeriesCollection lineDataset = new TimeSeriesCollection(); //访问量统计时间线 TimeSeries timeSeriesA = new TimeSeries("甲网站访问量统计", Month.class); TimeSeries timeSeriesB = new TimeSeries("乙网站访问量统计", Month.class); //构造数据集合 timeSeriesA.add(new Month(1, 2010), 3200); timeSeriesA.add(new Month(2, 2010), 3900); timeSeriesA.add(new Month(3, 2010), 6200); timeSeriesA.add(new Month(4, 2010), 4200); timeSeriesA.add(new Month(5, 2010), 5200); timeSeriesA.add(new Month(6, 2010), 3300); timeSeriesA.add(new Month(7, 2010), 4400); timeSeriesA.add(new Month(8, 2010), 7300); timeSeriesA.add(new Month(9, 2010), 2400); timeSeriesA.add(new Month(10, 2010), 2500); timeSeriesA.add(new Month(11, 2010), 3600); timeSeriesA.add(new Month(12, 2010), 2500); timeSeriesB.add(new Month(1, 2010), 1120); timeSeriesB.add(new Month(2, 2010), 900); timeSeriesB.add(new Month(3, 2010), 600); timeSeriesB.add(new Month(4, 2010), 820); timeSeriesB.add(new Month(5, 2010), 800); timeSeriesB.add(new Month(6, 2010), 1200); timeSeriesB.add(new Month(7, 2010), 1200); timeSeriesB.add(new Month(8, 2010), 830); timeSeriesB.add(new Month(9, 2010), 1200); timeSeriesB.add(new Month(10, 2010), 1500); timeSeriesB.add(new Month(11, 2010), 1600); timeSeriesB.add(new Month(12, 2010), 1500); lineDataset.addSeries(timeSeriesA); lineDataset.addSeries(timeSeriesB); JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true); //设置主标题 TextTitle title = new TextTitle("某网站年访问量统计", new Font("隶书", Font.ITALIC, 15)); chart.setTitle(title); //设置子标题 TextTitle subtitle = new TextTitle("2010年度", new Font("黑体", Font.BOLD, 12)); chart.addSubtitle(subtitle); chart.setAntiAlias(true); String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %> <img src="<%= graphURL %>" width=500 height=300 border=0 >

 运行后的曲线效果如下图所示:



 这个图呢就比较简单。没有那么多的参数修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值