jfreechart生成图表

      

        JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。


使用前要导入jar包



下面是一点简单的例子:

1,生成饼图

package cn.itcast.jfreechart;

import java.awt.Font;
import java.io.File;

import javax.imageio.ImageIO;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

public class App {
	
	public static void main(String[] args) throws Exception {
		//
		String title = "各大公司JEE AS市场占有率统计" ;
		DefaultPieDataset ds = new DefaultPieDataset();
		ds.setValue("IBM", 2000);
		ds.setValue("ORACLE", 3500);
		ds.setValue("JBOSS", 1570);
		ds.setValue("用友", 4400);
		JFreeChart chart = ChartFactory.createPieChart3D(title, ds, true, false, false);
		
		//中文
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 25));//标题字体
		chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 18));
		
		//绘图区
		PiePlot plot = (PiePlot) chart.getPlot();
		plot.setLabelFont(new Font("宋体", Font.PLAIN, 15));
		
		//背景
		//chart.setBackgroundImage(ImageIO.read(new File("f:/sunset.jpg")));//图表区背景
		//plot.setBackgroundImage(ImageIO.read(new File("f:/water.jpg")));
		
		//设置分裂效果
		plot.setExplodePercent("IBM", 0.1f);
		plot.setExplodePercent("JBOSS", 0.2f);
		
		//设置前景色透明度
		plot.setForegroundAlpha(0.7f);
		
		//设置标签生成器
		//{0}:公司名称
		//{1}:销量
		//{2}:百分比
		//{3}:总量
		//{4}:
		plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}/{3}-{2})"));
		ChartUtilities.saveChartAsJPEG(new File("f:\\pie.jpg"), chart, 800, 500);
	}
}
效果如下:


 


2,生成柱状图

package cn.itcast.jfreechart;

import java.awt.Font;
import java.io.File;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class AppBar {
	
	public static void main(String[] args) throws Exception {
		DefaultCategoryDataset ds = new DefaultCategoryDataset();
		ds.addValue(2000, "IBM", "一季度");
		ds.addValue(2300, "ORACLE", "一季度");
		ds.addValue(2800, "JBOSS", "一季度");
		ds.addValue(3300, "用友", "一季度");
		
		ds.addValue(4800, "IBM", "二季度");
		ds.addValue(4300, "ORACLE", "二季度");
		ds.addValue(3200, "JBOSS", "二季度");
		ds.addValue(1800, "用友", "二季度");
		
		ds.addValue(1500, "IBM", "三季度");
		ds.addValue(2600, "ORACLE", "三季度");
		ds.addValue(3900, "JBOSS", "三季度");
		ds.addValue(2100, "用友", "三季度");
		
		String title = "前三季度各大公司JEE AS销量统计" ;
		JFreeChart chart = ChartFactory.createBarChart3D(title, "季度", "销量(单位:万台)", ds, PlotOrientation.VERTICAL, true, false, false);
		
		//中文
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 25));//大标题
		
		//提示条
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		
		CategoryPlot plot = (CategoryPlot) chart.getPlot();
		//域轴字体
		plot.getDomainAxis().setLabelFont(new Font("宋体", Font.BOLD, 18));
		plot.getDomainAxis().setTickLabelFont(new Font("宋体", Font.PLAIN, 15));//小标签字体
		
		//range
		plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15));
		
		plot.setForegroundAlpha(0.6f);
		
		ChartUtilities.saveChartAsJPEG(new File("f:\\bar.jpg"), chart, 800, 500);
	}
}
效果如下:



3,生成折线图:

package cn.itcast.jfreechart;

import java.awt.Font;
import java.io.File;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class AppLine {
	
	public static void main(String[] args) throws Exception {
		DefaultCategoryDataset ds = new DefaultCategoryDataset();
		ds.addValue(2000, "IBM", "一季度");
		ds.addValue(2300, "ORACLE", "一季度");
		ds.addValue(2800, "JBOSS", "一季度");
		ds.addValue(3300, "用友", "一季度");
		
		ds.addValue(4800, "IBM", "二季度");
		ds.addValue(4300, "ORACLE", "二季度");
		ds.addValue(3200, "JBOSS", "二季度");
		ds.addValue(1800, "用友", "二季度");
		
		ds.addValue(1500, "IBM", "三季度");
		ds.addValue(2600, "ORACLE", "三季度");
		ds.addValue(3900, "JBOSS", "三季度");
		ds.addValue(2100, "用友", "三季度");
		
		String title = "前三季度各大公司JEE AS销量统计" ;
		JFreeChart chart = ChartFactory.createLineChart(title, "季度", "销量(单位:万台)", ds, PlotOrientation.VERTICAL, true, false, false);
		
		//中文
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 25));//大标题
		
		//提示条
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		
		CategoryPlot plot = (CategoryPlot) chart.getPlot();
		//域轴字体
		plot.getDomainAxis().setLabelFont(new Font("宋体", Font.BOLD, 18));
		plot.getDomainAxis().setTickLabelFont(new Font("宋体", Font.PLAIN, 15));//小标签字体
		
		//range
		plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15));
		
		plot.setForegroundAlpha(0.6f);
		
		ChartUtilities.saveChartAsJPEG(new File("f:\\line.jpg"), chart, 800, 500);
	}
}

效果如下:





示例工程:http://download.csdn.net/detail/u013614451/7344601



jfreeChart使用方法之一:(纯web环境,不采用框架,原理大致相当于将图片写到流中,然后页面直接在img 的src中引用)

1 .添加工具类ChartUtil 

  public class ChartUtil { 
 public  static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {    
  
String filename = null;    
 try {    
 if (session != null)    
 {    
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");    
 session.removeAttribute("JFreeChart_Deleter");    
 session.setAttribute("JFreeChart_Deleter", deleter);    
}    
JFreeChart chart = ChartFactory.createPieChart3D(    
title,  // chart title    
dataset, // data    
true,  // include legend    
true,    
false );    
//  Write the chart image to the temporary directory    
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());    
//If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.    
//If the last parameter is a session object, the chart remains until session time out.    
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);    
//  Write the image map to the PrintWriter    
 ChartUtilities.writeImageMap(pw, filename, info,true);    
 pw.flush();    
} catch (Exception e) {    
 System.out.println("Exception - " + e.toString());    
 e.printStackTrace(System.out);    
 filename = "picture_error.png"; }    
return filename;    
}    
}   
}



2、在action里统计数据,设置好数据集dataset。传到页面 

       3、 在页面jsp里取出 

DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset"); 
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out));    
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;


<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>  

   4、在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>





  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值