`
eric.zhang
  • 浏览: 127198 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jfreechart总结

阅读更多
一:JFreeChart功能介绍
JFreeChart 目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面:
pie charts (2D and 3D) :饼图(平面和立体)
bar charts (regular and stacked, with an optional 3D effect) :柱状图
line and area charts :曲线图
scatter plots and bubble charts
time series, high/low/open/close charts and candle stick charts :时序图
combination charts :复合图
Pareto charts
Gantt charts :甘特图
wind plots, meter charts and symbol charts
wafer map charts
( 态图表,饼图(二维和三维) , 柱状图 ( 水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表)
图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联
JFreeChart 核心类库介绍:
研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形
本身有关,后者与图形显示的数据有关。具体研究如果大家有兴趣的话可以自己研究 。
核心类主要有:
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: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区.

以下是一个简单的Jfreechart Web项目:

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
<!-- for test jfreechar -->
  <servlet>
    <servlet-name>ChartServlet</servlet-name>
    <servlet-class>cn.netjava.jFreeChart.ChartServlet</servlet-class>
  </servlet>
	
<servlet-mapping>
  <servlet-name>ChartServlet</servlet-name>
  <url-pattern>/servlet/ChartServlet</url-pattern>
 </servlet-mapping>

  <welcome-file-list>
    <welcome-file>viewChart.jsp</welcome-file>
  </welcome-file-list>
</web-app>


viewChart.jsp 用于显示图
<%@page contentType="text/html" pageEncoding="GBK"%>
<title>jFreeChart图表测试</title>
<br>请选择要生成的图表类型:
<hr>
<select id="scType" onchange="loadChartBySelectType(this)">
<option value="1">请选择一种图表</option>
<option value="PieChart3D">PieChart3D</option>
<option value="PieChart">PieChart</option>
<option value="BarChart3D">BarChart3D</option>
<option value="LineChart">LineChart</option>
<option value="RingChart">RingChart</option>
<option value="AreaChart">AreaChart</option>
<option value="WaterfallChart">WaterfallChart</option>
<option value="Thermometer">Thermometer</option>
<option value="MeterChart">MeterChart</option>
</select>
 <hr>
图表:
<div id="displayChart" />
 
 <script type="text/javascript">
/**选择jf图表类型时,载入图片*/
function loadChartBySelectType(sua) {
    var cType=sua.value;
    if(cType=="1"){
     return ;
    }
    alert("选中的是: "+cType)
     var disabledImageZone=document.getElementById("displayChart");
    //这样多简单,清理div中己有的东东:)
       disabledImageZone.innerHTML="";
      var image = document.createElement('img');
      image.setAttribute('id','imageZone');
      //提取服务器上的图片显示下来:
      image.setAttribute('src',"servlet/ChartServlet?chartType="+cType);
      disabledImageZone.appendChild(image);
      }
      </script>




后台处理类:
package cn.netjava.jFreeChart;

import java.awt.BasicStroke;
import java.awt.Color;
import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.MeterPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.ThermometerPlot;
import org.jfree.data.Range;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.DefaultValueDataset;


/**
 * 生成jFreeChart图片的Servlet
 * @author Eric.zhangh
 * Jan 8, 2011
 */
public class ChartServlet extends HttpServlet {
    /**
     * 根据客户端请求的图表类型chartType的值,返回对应的图表,
     */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 输出图片格式为png格式
		response.setHeader("Cache-Control", "no-cache");
		response.setContentType("image/png");
		//请求的图表类型
		String chartType = request.getParameter("chartType");
		System.out.println("请求的图表类型是 : " + chartType);
		// for export Chart:
		JFreeChart chart = null;
		if (chartType.equalsIgnoreCase("PieChart3D")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createPieChart3D("这是PieChart3D图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("PieChart")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createPieChart("这是PieChart图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("RingChart")) {
			// 创建pie图的数据集方法
			DefaultPieDataset data = ChartTools.getPieDataSet();
			chart = ChartFactory.createRingChart("这是RingChart图:", data, true,
					false, false);
		} else if (chartType.equalsIgnoreCase("BarChart3D")) {
			// 创建bar图的数据集方法
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			// PlotOrientation.HORIZONTAL这个参数说明是水平还是垂直方向VERTICAL
			chart = ChartFactory.createBarChart3D("这是BarChart3D", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("LineChart")) {
			// 创建线图
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createLineChart("这是LineChart", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("AreaChart")) {
			// 创建区域形图
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createAreaChart("这是AreaChart", "数量", "地点",
					data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("WaterfallChart")) {
			// 搞不明白这是什么图:(
			DefaultCategoryDataset data = ChartTools.getCategoryDataset();
			chart = ChartFactory.createWaterfallChart("这是WaterfallChart", "数量",
					"地点", data, PlotOrientation.VERTICAL, true, false, false);
		} else if (chartType.equalsIgnoreCase("Thermometer")) {
			// 整个温度计。。。。。。。。。。
			// 数据集,初始值为0
			DefaultValueDataset valuedataset = new DefaultValueDataset(0);
			// 创建漫度计的Plot对象
			ThermometerPlot thermometerplot = new ThermometerPlot(valuedataset);
			chart = new JFreeChart("设备温度", JFreeChart.DEFAULT_TITLE_FONT,
					thermometerplot, false);
			thermometerplot.setThermometerStroke(new BasicStroke(2.0F));
			// 图表的轮廓颜色
			thermometerplot.setThermometerPaint(Color.BLUE);
			thermometerplot.setOutlinePaint(null);
			// 图表计数单位
			thermometerplot.setUnits(10);
			// 数值范围
			thermometerplot.setRange(-40, 40);
			thermometerplot.setForegroundAlpha(1f);
			// 图表的当前值
			valuedataset.setValue(20);
		} else if (chartType.equalsIgnoreCase("MeterChart")) {
			// 整个仪表盘
			// 数据集,初始值为30
			DefaultValueDataset valuedataset = new DefaultValueDataset(30);
			// 创建Plot对象
			MeterPlot meterplot = new MeterPlot(valuedataset);
			chart = new JFreeChart("当前流量速度", JFreeChart.DEFAULT_TITLE_FONT,
					meterplot, false);
			// 表盘上显示的数据单位说明
			meterplot.setUnits("条/秒)");
			// 表盘分害的单位,即30为一格
			meterplot.setTickSize(30);
			// 显示数据范围,0~600
			meterplot.setRange(new Range(0, 600));
			// 图表的当前值
			valuedataset.setValue(100);
		}
		if (null != chart) {
			// 将图片对象输出到客户端
			java.io.OutputStream ous = response.getOutputStream();
			ChartUtilities.writeChartAsPNG(ous, chart, 500, 300);
			// 使用这样的代码输出可能会出错!
			// ChartUtilities.writeChartAsJPEG(ous,100,chart,500,300,null);
			ous.flush();
			ous.close();
			System.out.println("******ho ho..*****图片输出完毕....... " + chartType);
		}
	}
}


/**
 * 生成图片数据集的工具类:
 * @author Eric.zhangh
 * Jan 8, 2011
 */
class ChartTools {
	/**
	 * 生成bar图的数据集:
	 * @return:可用于Bar图的数据集
	 */
	public static DefaultCategoryDataset getCategoryDataset() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		for (int series = 0; series < seriesTimes.length; series++) {
			for (int i = 0; i < seriesNames.length; i++) {
				nameValueOfTime[series][i] = new java.util.Random()
						.nextInt(300) + 100;
				dataset.addValue(nameValueOfTime[series][i], seriesNames[i],
						seriesTimes[series]);
			}
		}
		return dataset;
	}

	/**
	 * 创建用于填充pie图的数据集
	 * @return DefaultPieDataset对象
	 */
	public static DefaultPieDataset getPieDataSet() {
		// 用来填充pie图的数据集
		DefaultPieDataset dataset = new DefaultPieDataset();
		// 饼图分块名字
		String[] seriesNames = { "东方路", "南京路", "北京路", "大学路", };
		for (int i = 0; i < seriesNames.length; i++) {
			int value = new java.util.Random().nextInt(1000) + 500;
			// 设置pie数据集中的数据对
			dataset.setValue(seriesNames[i], value);
		}
		return dataset;
	}
  
	private ChartTools(){};
	/** X轴时间维数据序型(当然也可以为标签维度)* */
	private static String[] seriesTimes = { "一月", "二月", "三月", "四月", "五月", "六月","七月" };
	/** 柱状标签序列(比如做为地点序列) */
	private static String[] seriesNames = { "南京东路", "北京东路", "浦东南路" };
	/** 每个时间点上每个地区/类型序列的值 */
	private static int[][] nameValueOfTime = new int[seriesTimes.length][seriesNames.length];
}
























  • 大小: 21.1 KB
  • 大小: 23.1 KB
  • 大小: 22.3 KB
  • 大小: 23.5 KB
  • 大小: 24.7 KB
  • 大小: 20 KB
  • 大小: 14.5 KB
  • 大小: 12.8 KB
  • 大小: 16.7 KB
分享到:
评论

相关推荐

    JFreeChart总结

    **JFreeChart总结** 在Java开发中,可视化数据呈现是一个重要的方面,特别是在Web应用程序中,用户需要直观地理解复杂的数据信息。JFreeChart是一个强大的开源图表库,它为Java开发者提供了一种简单的方式,用于...

    JfreeChart学习总结JfreeChart学习总结

    JfreeChart学习总结JfreeChart学习总结

    JFreeChart

    **"jfreechart 总结.txt" 和 "JFreeChart.txt"** 文件可能包含了JFreeChart的使用总结、技巧、注意事项或者其他开发者的经验分享,对于学习和使用JFreeChart来说是非常宝贵的参考资料。 总的来说,JFreeChart是一个...

    jfreechart总结文档

    **JFreeChart 概述** JFreeChart 是一个开源的 Java 图表库,可以在 SourceForge.net 上找到。这个项目的主要目标是提供一个丰富的图表生成工具,适用于多种图表类型,包括但不限于饼图、柱状图(普通柱状图及堆栈...

    jFreeChart学习总结

    ### JFreeChart学习总结 #### 一、为什么学习JFreeChart? 随着互联网技术的飞速发展,越来越多的应用程序转向了Web平台。这不仅包括传统的静态网页,也涵盖了那些需要复杂数据展示的应用,如报表系统。然而,从...

    jfreechart的一个小总结

    JFreeChart 是一个开源的 Java 图表库,它允许开发者创建各种复杂的图表,如柱状图、饼图、散点图、线形图等。在本文中,我们将深入探讨 JFreeChart 的核心类和它们在创建图表过程中的作用。 1. **JFreeChart 类**...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    总结来说,JFreeChart是Java开发中不可或缺的工具,它提供了丰富的图表库和强大的定制能力,无论是在企业级应用还是个人项目中,都能展现出强大的图形处理能力。通过深入学习和实践,开发者可以利用JFreeChart轻松...

    JFreeChart-1.0.9.zip jfreechart.jar

    **总结** JFreeChart是一个强大且灵活的Java图表库,适用于需要数据可视化的各种项目。通过其丰富的图表类型、高度的定制性和良好的API设计,JFreeChart可以帮助开发者快速实现美观且功能丰富的数据展示。要了解更...

    JfreeChart-雷达图与导出

    **总结** JFreeChart是Java开发中用于图表绘制的重要工具,它提供了丰富的图表类型,包括适用于多变量分析的雷达图。通过自定义属性,可以轻松调整图表外观,满足各种需求。同时,JFreeChart还支持图表的导出,方便...

    代替jfreechart的FusionCharts

    六、总结 FusionCharts以其出色的设计、易用性和广泛的平台支持,成为许多开发者在数据可视化领域的首选。对于那些寻求提升图表质量和用户体验的项目来说,FusionCharts是一个极具吸引力的替代方案。通过熟悉其API和...

    jfreechart中文学习文档

    总结而言,JFreeChart 不仅是一个功能强大的图表生成库,而且拥有活跃的社区支持,提供了详尽的文档和示例代码。无论是初学者还是有经验的开发者,都能够通过本文档快速上手并熟练掌握 JFreeChart 的使用技巧。

    jfreechart-1.0.19

    **总结** JFreeChart是Java开发者的强大工具,它简化了创建专业图表的过程,并且具有高度的定制性和灵活性。通过使用提供的API文档和示例,开发者可以快速上手并创建出满足需求的图表。无论是在桌面应用还是Web应用...

    Jfreechart操作总结

    **JFreeChart 操作总结** JFreeChart 是一个强大的 Java 图表库,它允许开发者创建各种复杂的图表,如饼图、柱状图、线图、散点图等,广泛应用于数据分析、报告生成以及可视化应用中。这篇总结将涵盖 JFreeChart 的...

    JfreeChart各种图形案例

    **JFreeChart是一种广泛使用的Java...总结来说,"JfreeChart各种图形案例"这个资源是一份宝贵的开发工具,无论你是初学者还是有经验的开发者,都可以从中受益,快速掌握JFreeChart的使用技巧,提升你的数据可视化能力。

Global site tag (gtag.js) - Google Analytics