<%@ page contentType=\
<%@ page import = \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.data.time.TimeSeriesCollection, java.awt.Font\<%
//访问量统计时间线
TimeSeries timeSeries = new TimeSeries(\阿蜜果blog访问量统计\class); //时间曲线数据集合
TimeSeriesCollection lineDataset = new TimeSeriesCollection(); //构造数据集合
timeSeries.add(new Month(1, 2007), 11200); timeSeries.add(new Month(2, 2007), 9000); timeSeries.add(new Month(3, 2007), 6200); timeSeries.add(new Month(4, 2007), 8200); timeSeries.add(new Month(5, 2007), 8200); timeSeries.add(new Month(6, 2007), 12200); timeSeries.add(new Month(7, 2007), 13200); timeSeries.add(new Month(8, 2007), 8300); timeSeries.add(new Month(9, 2007), 12400); timeSeries.add(new Month(10, 2007), 12500); timeSeries.add(new Month(11, 2007), 13600); timeSeries.add(new Month(12, 2007), 12500);
lineDataset.addSeries(timeSeries);
JFreeChart chart = ChartFactory.createTimeSeriesChart(\访问量统计时间线\月份\访问量\true, true, true); //设置子标题
TextTitle subtitle = new TextTitle(\年度\new Font(\黑体\chart.addSubtitle(subtitle); //设置主标题
chart.setTitle(new TextTitle(\阿蜜果blog访问量统计\new Font(\隶书\C, 15)));
chart.setAntiAlias(true);
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + \%>
运行后的曲线效果如下图所示:
有时我们需要显示各数据点及其数值,这是我们需要对上例进行一点改动,在JFreeChart chart = ChartFactory.createTimeSeriesChart……后,TextTitle subtitle = new TextTitle……前加上如下的代码:
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white); //设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink); //设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink); //设置曲线图与xy轴的距离
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D)); //设置曲线是否显示数据点
xylineandshaperenderer.setBaseShapesVisible(true); //设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer(); xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); xyitem.setBaseItemLabelFont(new Font(\plot.setRenderer(xyitem);
并引入了一些另外的包,引入包的语句变成: <%@ page import = \org.jfree.chart.title.TextTitle,
org.jfree.data.time.TimeSeries, org.jfree.data.time.Month,
org.jfree.data.time.TimeSeriesCollection, org.jfree.chart.plot.XYPlot,
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer, java.awt.Color,
org.jfree.ui.RectangleInsets, java.awt.Font,
org.jfree.chart.renderer.xy.XYItemRenderer, org.jfree.chart.JFreeChart,
org.jfree.chart.servlet.ServletUtilities, org.jfree.chart.labels.*, org.jfree.ui.*\
运行该实例,效果如下所示:
上面两例的曲线图都是单曲线的,有时候我们对两个曲线进行比较,例如对阿蜜果在2006年度和2007年度的blog访问量进行比较,在此种情况下,我们需要在一个曲线图中显示两个
曲线。在此种情况下,我们只需要在sample1.jsp的基础上新建一个TimeSeries对象,给它添加数据后,将其添加到TimeSeriesCollection型数据集合对象中,修改后的程序主体部分如下所示:
//访问量统计时间线
TimeSeries timeSeries2006 = new TimeSeries(\年度\class); TimeSeries timeSeries2007 = new TimeSeries(\年度\class);
//时间曲线数据集合
TimeSeriesCollection lineDataset = new TimeSeriesCollection(); //构造数据集合
timeSeries2006.add(new Month(1, 2007), 7200); timeSeries2006.add(new Month(2, 2007), 7000); timeSeries2006.add(new Month(3, 2007), 4200); timeSeries2006.add(new Month(4, 2007), 8200); timeSeries2006.add(new Month(5, 2007), 7300); timeSeries2006.add(new Month(6, 2007), 8200); timeSeries2006.add(new Month(7, 2007), 9200); timeSeries2006.add(new Month(8, 2007), 7300); timeSeries2006.add(new Month(9, 2007), 9400); timeSeries2006.add(new Month(10, 2007), 7500); timeSeries2006.add(new Month(11, 2007), 6600); timeSeries2006.add(new Month(12, 2007), 3500); timeSeries2007.add(new Month(1, 2007), 10200); timeSeries2007.add(new Month(2, 2007), 9000); timeSeries2007.add(new Month(3, 2007), 6200); timeSeries2007.add(new Month(4, 2007), 8200); timeSeries2007.add(new Month(5, 2007), 8200);