jfreechart 实现时间曲线图
一、JFreeChart获取。
JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下:
1、JFreeReport:报表解决工具
2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)
3、JCommon:JFreeReport和JFreeChart的公共类库
4、JFreeDesigner:JFreeReport的报表设计工具
我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),下载地址:http://www.jfree.org/jfreechart/index.html(同时可以获得简明介绍)
我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。
二、JFreeChart配置安装
1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar 是例子程序(该部分留给大家自己去研究)
2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、lib\gnujaxp.jar。
3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入,如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明。
把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。
如果是中文显示的时候可能依据观感需要改变源码的字体,不过我个人觉得这个版本比以前版本要好一些。
三、Demo
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import =" java.awt.*, java.text.SimpleDateFormat,javax.swing.JPanel,
org.jfree.chart.ChartFactory,org.jfree.chart.ChartPanel,
org.jfree.chart.JFreeChart,
org.jfree.chart.axis.DateAxis,
org.jfree.chart.plot.XYPlot,
org.jfree.chart.renderer.xy.XYItemRenderer,
org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,
org.jfree.data.time.*,
org.jfree.data.time.TimeSeries,
org.jfree.data.time.TimeSeriesCollection,
org.jfree.data.xy.XYDataset"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="java.util.*"%>
<%@ page import = "org.jfree.ui.RectangleInsets"%>
<%@ page import = "java.sql.*"%>
<%
//连接数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jfree";
String usr="sa";
String pwd="";
Connection conn=DriverManager.getConnection(url,usr,pwd);
Statement stmt=conn.createStatement();
String sql="select * from jfree order by id";
ResultSet rs=stmt.executeQuery(sql);
//设置曲线,共三条曲线
TimeSeries timeseries = new TimeSeries("平均",Minute.class);//时间的最小单位为分,线值名是“平均”
TimeSeries timeseries1 = new TimeSeries("usl",Minute.class);
TimeSeries timeseries2 = new TimeSeries("lsl",Minute.class);
//从数据库中取值,数据和时间
while(rs.next())
{
float y0=rs.getFloat("lengthavg");
float y1=rs.getFloat("lengthusl");
float y2=rs.getFloat("lengthlsl");
String s=rs.getString("addtime");
//从yyyyMMddHHmm时间格式的char中取出年月日小时分设为int值
int x=Integer.parseInt(s.substring(0,4));
int y=Integer.parseInt(s.substring(4,6));
int z=Integer.parseInt(s.substring(6,8));
int a=Integer.parseInt(s.substring(8,10));
int b=Integer.parseInt(s.substring(10,12));
timeseries.add(new Minute(b,new Hour(a,new Day(z,y,x))),y0);
timeseries1.add(new Minute(b,new Hour(a,new Day(z,y,x))),y1);
timeseries2.add(new Minute(b,new Hour(a,new Day(z,y,x))),y2);
}
//连接曲线
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(timeseries);
dataset.addSeries(timeseries1);
dataset.addSeries(timeseries2);
dataset.setDomainIsPointsInTime(true);
//设置曲线图
XYDataset xydataset = (XYDataset) dataset;
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"走势图",
"时间",
"值",
xydataset,
true,
true,
true
);
chart.setBackgroundPaint(Color.white);//设置曲线图背景色
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
plot.setBackgroundPaint(Color.white));//设置网格背景颜色
plot.setDomainGridlinePaint(Color.pink);//设置网格竖线颜色
plot.setRangeGridlinePaint(Color.pink);//设置网格横线颜色
plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));//设置曲线图与xy轴的距离,即曲线与xy轴贴近的距离
xylineandshaperenderer.setBaseShapesVisible(true);//设置曲线是否显示数据点
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<img src="../../<%= graphURL %>" border=0 usemap="#<%= filename %>">
另外说一下,以前看到有很多人都说不能显示图,出来一个叉,一般那都是设置的servlet的错,我看到有的人就是用设置为servlets的
所以就要在
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
中改为
String graphURL = request.getContextPath() + "/servlets /DisplayChart?filename=" + filename;
这个都要具体对待,出来叉的话有一点是肯定的,程序代码中没有程序错误,只是路径错误而已
注意:有些类没有的话,可能是版本更换的问题,可以去源码或者API中找找看,有可能是换了位置,也可能是换了名字。
<!--EndFragment-->
分享到:
相关推荐
本文将基于提供的代码片段,深入探讨如何使用JFreeChart实现实时更新的曲线图。 ### 实现原理 在Java中使用JFreeChart创建实时曲线图,主要涉及以下几个关键步骤: 1. **创建时间序列(Time Series)**:时间序列...
JFreeChart实现实时曲线图 JFreeChart是Java平台上一种流行的图表库,提供了丰富的图表类型和自定义功能。实现实时曲线图是JFreeChart的一个重要应用场景,本文将详细介绍JFreeChart实现实时曲线图的方法。 实时...
曲线图适合显示数据随时间的变化趋势,JFreeChart中的`XYPlot`类用于创建这种图表。同样,我们需要一个数据集,如`XYSeriesCollection`,然后将数据集绑定到`XYPlot`,并配置线条样式、标记和坐标轴属性。 饼图则...
JFreeChart是一个强大的Java库,它允许开发者创建各种类型的图表,包括曲线图、柱状图、饼状图和分布图等。在当前JS图表库盛行的时代,JFreeChart依然因其稳定性和丰富的定制性而在Java领域占有一席之地。本文将详细...
**二、JFreeChart 实现时间曲线图** 时间曲线图是 JFreeChart 中一种重要的图表类型,通常用于展示随时间变化的趋势。通过结合 SQL 数据库,可以动态获取并展示时间序列数据。文件“jfreechart+sql实现时间曲线图...
曲线图则是用折线连接各个数据点,显示数据随时间或其他因素的变化趋势。 在使用Struts2.0和JFreeChart进行图表开发时,首先需要在项目中引入JFreeChart的依赖库。然后,我们可以创建一个Action类,该类负责处理...
曲线图则常用于展示数据随时间的变化趋势,例如股票价格、销售数据等。 在“flex jfreechart生成 饼状图”的场景下,我们首先需要在Java端使用JFreeChart库创建饼状图,然后将其转换为图像格式(如JPEG或PNG)。...
### jfreechart根据24小时数据画折线图 #### 一、jfreechart简介 jfreechart是一款基于Java的开源图表绘制库,它能够帮助开发者轻松地在应用程序中生成各种图表,包括折线图、饼图、柱状图等。它的主要优势在于...
在提供的代码片段中,演示了如何使用JfreeChart库创建一个动态更新的时间序列曲线图。该实例涉及的关键概念和代码分析如下: #### 创建图表 - **导入必要类**:首先,代码导入了JFreeChart相关的类,如`...
曲线图常用于展示连续的数据变化趋势,例如时间序列数据。JFreeChart提供了一种灵活的方式来创建这些图表,包括线性、指数、对数和其他类型的曲线。通过调整X轴和Y轴的范围,可以清晰地展示数据的动态变化。 2. **...
总结一下,Java JFreeChart 提供了丰富的功能,能够帮助开发者生成各种类型的图表,包括饼图、条形图和曲线图,以实现数据的可视化。通过使用不同的数据集和渲染器,你可以根据需求自定义图表的外观和行为。在给定的...
**JFreeChart** 是一个Java库,用于生成高质量的图表,包括曲线图、柱状图、折线图、饼图以及甘特图等。它在Java应用和Web应用中广泛使用,尤其是对于数据可视化和报告生成。JFreeChart库不仅支持静态图表,还能够...
`JSP`(JavaServer Pages)是一种动态网页技术,可以与后端数据库进行交互,而`JFreeChart`是一个强大的Java图表库,能够帮助开发者生成各种高质量的图表,包括曲线图。本篇文章将深入探讨如何在`JSP`中调用数据库...
1. **多样的图表类型**:除了曲线图,JFreeChart还可以创建饼图、柱状图、散点图、甘特图、时间序列图等多种图表,满足不同数据可视化需求。 2. **高度可定制化**:你可以调整图表的每一个细节,包括颜色、字体、...
甘特图是项目管理中常用的时间进度表示法,JFreeChart的`GanttRenderer`允许创建带有任务条和进度的图表。 8. **仪表盘(Dashboard)** JFreeChart也支持创建类似汽车仪表盘的图形组件,如速度表、刻度盘等,用于...
曲线图,也称为折线图,适用于展示数据随时间的变化趋势。JFreeChart的`XYPlot`类支持创建折线图,每个数据点由X轴的值和Y轴的值确定。可以绘制多条折线,以便对比多个数据序列。曲线图可以配置为平滑曲线,通过插值...
在本文中,我们将深入探讨如何使用Java的JFreeChart库来创建曲线图,以及相关的配置和示例代码。 JFreeChart是一个强大的Java图形库,它提供了丰富的图表类型,包括曲线图、柱状图、饼图等,适用于多种场景,如桌面...
柱状图常用于比较不同类别的数量或比例,饼状图展示了各部分占整体的比例,而曲线图则用于显示数据随时间的变化趋势。 2. **封装的意义**:封装是面向对象编程的核心思想之一,它可以隐藏复杂的实现细节,提供简洁...
通过上述示例可以看出,使用JFreeChart绘制曲线图不仅简单直观,而且可以轻松实现高度定制化的图表样式。无论是初学者还是经验丰富的开发者,都能借助JFreeChart强大的功能快速构建出美观实用的数据可视化图表。