核心类主要有:
org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
org.jfree.data.category.XXXDataSet:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类
org.jfree.chart.plot.XXXPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持
org.jfree.chart.axis.XXXAxis:用于处理图表的两个轴:纵轴和横轴
org.jfree.chart.render.XXXRender:负责如何显示一个图表对象
org.jfree.chart.urls.XXXURLGenerator:用于生成Web图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类
对于常用的饼图阖柱状图,比较简单而且网上有很多的文章介绍,在这里就不再一一复述了,
(可以参考这篇文章http://www-128.ibm.com/developerworks/cn/java/l-jfreechart/index.html?ca=dwcn-isc&me=ccid)
主要说明下另一种常见的报表,时序图,首先声明一个曲线数据集合对象和曲线对象
TimePeriodValuesCollection timeseriescollection = new TimePeriodValuesCollection();
//声明具体是曲线对象,(可根据实际情况在同一张图中显示多条曲线进行数据比对,根据实际应用情况当超过4条曲线时,就会有些乱。)
TimePeriodValues timeperiod1 = new TimePeriodValues("服务器A在线用户数量");
TimePeriodValues timeperiod2 = new TimePeriodValues("服务器B在线用户数量");
我在使用TimeSeriesCollection tsc = new TimeSeriesCollection();
TimeSeries ts = new TimeSeries();
在生成数据集时(ts.add(new Day(day, month, year),10)))只能生成最小单位为天的横轴所以改用了TimePeriodValuesCollection
//根据当前时间取得横轴坐标,时间间隔为1小时
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
//这里改为根据自己程序得到的需要显示的时间点和对应的数据的集合;
List objectList1 = dao.getList1();
List objectList2 = dao.getList2();
//使用循环,把x轴,y轴的值赋给timeseries1
for (int i =0;i<objecthash1.size();i++) {
int hour = objecthash1[i].getHours();
int count = objecthash1[i].getCount();
//将每一对数据(时间,数值)添加到数据集合1(曲线对象1)中
timeseries1.add(new Hour(hour, day, month, year),count);
}
for (int i =0;i<objecthash2.size();i++) {
int hour = objecthash2[i].getHours();
int count = objecthash2[i].getCount();
//将每一对数据(时间,数值)添加到数据集合2(曲线对象2)中
timeseries2.add(new Hour(hour, day, month, year),count);
}
//将曲线对象添加到曲线数据集合对象中
timeseriescollection.addSeries(timeseries1);
timeseriescollection.addSeries(timeseries2);
//绘制报表
String title = "日在线用户统计"; //报表标题
String domain = "时间"; //x轴
String range = "用户在线数量"; //y轴
//创建时间序列图对象
JFreeChart chart = ChartFactory.createTimeSeriesChart(
title, //报表标题
domain, //报表横轴标签
range, //报表纵轴标签
timeseriescollection, //数据集合
true, //是否显示图例,在这里如果为true则会在图表的下方显示各条数据曲线的名称和颜色
false, // 是否生成工具
false // 是否生成URL链接);
//将报表保存为jpg文件
ChartUtilities.saveChartAsJPEG(file, //文件保存物理路径包括路径和文件名
100, //图片质量
chart, //图表对象
1024, //图像宽度
768, //图像高度
null); //显示信息
//将报表直接在页面输出
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,1024,768,null);
String title="月在线用户统计"; //标题
String domain="时间(天)";//x轴
String range="用户在线数量";//y轴
TimePeriodValuesCollection timeseriescollection = new TimePeriodValuesCollection();
TimePeriodValues timeseries = new TimePeriodValues( "用户数量");
timeseries.add(new Minute(0, 1, 1, 1, 2006), 100);
timeseries.add(new Minute(10, 1, 1, 1, 2006), 500);
timeseries.add(new Minute(20, 1, 1, 1, 2006), 300);
timeseries.add(new Minute(30, 1, 1, 1, 2006), 800);
JFreeChart chart =ChartFactory.createTimeSeriesChart(title,domain,range,timeseriescollection,true,false,false);
当我们生成了一个报表对象时,可能需要根据实际情况来决定报表的横轴和纵轴的数值间隔,显示方式等。
可以用XYPlot xyplot = (XYPlot)chart.getPlot();来得到所有数据点的集合。(其它形状图表得到的数据集对象根据实际情况造型)
得到数据点集合后,我们就可以设置各条曲线的颜色,和坐标轴的距离,x轴、y轴的显示方式等等属性
xyplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); //设定坐标轴与图表数据显示部分距离
xyplot.setDomainGridlinePaint(Color.white); //网格线纵向颜色
xyplot.setRangeGridlinePaint(Color.white); //网格线横向颜色
数据点的调整
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
xylineandshaperenderer.setDefaultShapesVisible(true); //数据点可见
xylineandshaperenderer.setSeriesFillPaint(0, Color.red); //设置第一条曲线数据点填充为红色,如果一个图表有多条曲线可分别设置
xylineandshaperenderer.setUseFillPaint(true); //应用
使用xyplot.getRangeAxis()得到纵轴,xyplot.getDomainAxis()得到横轴,得到后可以根据实际情况造型为自己所需要的类型。
我的图表纵轴为数值类型,横轴为时间类型,使用如下方式
NumberAxis numAxis = (NumberAxis)xyplot.getRangeAxis();
DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
//设置y显示方式
numAxis.setAutoTickUnitSelection(false);//数据轴的数据标签是否自动确定
double rangetick = 0.1D;
numAxis.setTickUnit(new NumberTickUnit(rangetick)); //y轴单位间隔为0.1
//设置x轴显示方式
dateaxis.setAutoTickUnitSelection(false);//数据轴的数据标签是否自动确定
dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY,1));//x轴单位间隔为1天
我们还可以是将数据格式化以后显示,比如y轴显示百分比(10%~100%),x轴显示为×月×日
NumberFormat nf =NumberFormat.getPercentInstance();
numAxis.setNumberFormatOverride(nf);//设置y轴以百分比方式显示
SimpleDateFormat format = new SimpleDateFormat("MM月dd");
dateaxis.setDateFormatOverride(format);//设置x轴数据单位以×月×日方式显示
时序图中还有一个很重要的方法
timeseriescollection.setDomainIsPointsInTime(true); //x轴上的刻度点代表的是时间点而不是时间段
最开始我没有设置这个属性,结果画出来的图,老是差半格不能在这个刻度的时候准确显示,往后移了半格,就是因为JFreeChart默认这个刻度是
一个时间段,它把这个刻度和下个刻度的中间点认为是显示数据点最佳位置。
分享到:
相关推荐
**JFreeChart简介** JFreeChart是一个开源的Java库,用于生成高质量的图表。它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图、面积图、甘特图等,广泛应用于数据分析、报表制作以及各种Java应用程序中。...
**一、JFreeChart简介** JFreeChart 提供了一个简单易用的API,允许开发者通过几行代码就可以创建出专业的图表。它的核心功能包括: 1. **图表类型**:支持多种图表类型,如折线图、柱状图、饼图、散点图、甘特图...
JFreeChart 简介** JFreeChart 是由 David Gilbert 开发的,它提供了一种灵活的方式来创建静态和动态图表,支持多种输出格式,如 PNG、JPEG、SVG 和 PDF。这个库特别适合那些需要在 Java 应用程序、Web 应用、报表...
这个“jfreechar实际例子”压缩包很可能是包含了一些示例代码或者项目,用于演示如何在实际应用中使用JFreeChart库。以下是对JFreeChart库及其在实际例子中的应用进行的详细说明。 **1. JFreeChart简介** ...
一、JFreeChart简介 JFreeChart的核心优势在于其灵活性和可定制性。它允许开发者自定义颜色、字体、标签、图例样式等,甚至可以调整图表的每一个细节,以满足不同应用场景的需求。通过简单的API调用,开发者可以轻松...
**一、JFreeChart简介** JFreeChart是一个开源的Java类库,主要用于创建各种类型的图表,如柱状图、饼图、折线图、散点图等。它的设计目标是提供一个灵活且易于使用的API,使得开发者可以快速地在Java应用程序、Web...
JFreeChart简介 JFreeChart项目始于2001年,由David Gilbert领导开发,遵循LGPL许可协议。它提供了一套全面的API,可以方便地创建多种类型的图表,并支持自定义颜色、样式和布局。JFreeChart可以与Swing、JavaFX...
#### 一、简介与安装 JFreeChart是一款非常流行的开源图表库,专为Java应用程序设计。它提供了丰富的图表类型,包括饼图、柱状图、折线图等,几乎涵盖了所有常见的统计图表需求。JFreeChart由JFree组织维护,并在...
1. **JFreeChart简介** JFreeChart是开源的Java类库,它提供了丰富的图表类型,适用于各种应用场合,如报表、数据分析、监控系统等。这个库支持动态图表,可以与Swing、JavaFX等图形用户界面库无缝集成,也可以导出...
1. **JFreeChart简介** JFreeChart是一个开源项目,基于Java语言,遵循GNU Lesser General Public License(LGPL)。它提供了一套完整的API,使得开发者可以方便地生成静态图表,并可以导出为多种格式,如JPEG、PNG...
**一、JFreeChart简介** JFreeChart是一款强大的Java库,用于生成高质量的图表,支持多种图表类型,包括柱状图、折线图、饼图、散点图、甘特图等。它以其灵活性、易用性和丰富的定制功能,在Java开发领域广受欢迎。...