2010.03.08——JfreeChart之饼图以及步骤和三个结果展示方式

2010.03.08——JfreeChart之饼图以及步骤和三个结果展示方式
参考:http://blog.csdn.net/qjyong/archive/2009/12/08/4967705.aspx

一、JfreeChart的基本步骤:
[color=green][b]1、建立Dataset,创建数据集对象
所有的数据都存放在Dataset中的。(创建一个数据源(dataset)来包含将要在图形中显示的数据)
2、建立JFreeChart,创建图表
3、选择结果输出的方式。[/b][/color]


重要的类和接口:
[color=olive][b]org.jfree.data.general.Dataset 所有数据源类都要实现的接口
org.jfree.chart.ChartFactory 由它来产生 JFreeChart 对象
org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!
org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整
注意:它有很多子类,一般都下涉及到它的子类!
org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。同样,针对不同类型的报表图,它有着不同的子类实现!在下面我们简称它为 Renderer[/b][/color]


二、三中结果展示方式:
[color=brown][b]1.输出图表到Swing窗口 见下面drawToFrame方法
2.输出图表到磁盘 见下面drawToOutputStream方法
3.输出图表到页面[/b][/color]


三、饼图
package test;   

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

/**
* 使用JFreeChart绘制饼图
* @author qiujy
*/
public class PieChartTest {

/**
* step1:创建数据集对象
* @return
*/
public static PieDataset createDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("java程序设计语言", 10000);
dataset.setValue("JSP基础与案例开发详解", 20000);
dataset.setValue("struts基础与案例开发详解", 30000);
dataset.setValue("精通JSF", 40000);

return dataset;
}

/**
* step2:创建图表
* @param dataset
* @return
*/
public static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart3D(
//JFreeChart chart = ChartFactory.createPieChart(
"原创图书销量统计", // 图表标题
dataset, // 数据集
true, // 是否显示图例
true, // 是否显示工具提示
true // 是否生成URL
);

//设置标题字体==为了防止中文乱码:必须设置字体
chart.setTitle(new TextTitle("原创图书销量统计", new Font("黑体", Font.ITALIC, 22)));
//设置图例的字体==为了防止中文乱码:必须设置字体
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12));
// 获取饼图的Plot对象(实际图表)
PiePlot plot = (PiePlot) chart.getPlot();
//图形边框颜色
plot.setBaseSectionOutlinePaint(Color.GRAY);
//图形边框粗细
plot.setBaseSectionOutlineStroke(new BasicStroke(0.0f));
//设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制
plot.setDirection(Rotation.ANTICLOCKWISE);
//设置绘制角度(图形旋转角度)
plot.setStartAngle(70);
//设置突出显示的数据块
plot.setExplodePercent("One", 0.1D);
//设置背景色透明度
plot.setBackgroundAlpha(0.7F);
// 设置前景色透明度
plot.setForegroundAlpha(0.65F);
//设置区块标签的字体==为了防止中文乱码:必须设置字体
plot.setLabelFont(new Font("隶书", Font.PLAIN, 12));
// 扇区分离显示,对3D图不起效
plot.setExplodePercent(dataset.getKey(3), 0.1D);
// 图例显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}:{1}\r\n({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比
// plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
// 指定显示的饼图为:圆形(true) 还是椭圆形(false)
plot.setCircular(false);
// 没有数据的时候显示的内容
plot.setNoDataMessage("找不到可用数据...");

//设置鼠标悬停提示
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
//设置热点链接
plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp"));

return chart;
}

/**
* [color=olive]step3: 输出图表到Swing Frame[/color]
* @param chart
*/
public static void drawToFrame(JFreeChart chart){
//输出图表到Swing Frame
ChartFrame frame = new ChartFrame("原创图书销量统计", chart);
frame.pack();
frame.setVisible(true);
}

/**
* [color=olive]step3: 输出图表到指定的磁盘[/color]
* @param destPath
* @param chart
*/
public static void drawToOutputStream(String destPath, JFreeChart chart) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(destPath);
// ChartUtilities.writeChartAsJPEG(
ChartUtilities.writeChartAsPNG(fos, // 指定目标输出流
chart, // 图表对象
600, // 宽
400, // 高
null); // ChartRenderingInfo信息
} catch (IOException e) {
e.printStackTrace();
} finally {
try { fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* [color=olive]step3: 输出图表到网页[/color]
* @param destPath
* @param chart
*/
public static String drawToHtml(JFreeChart chart,HttpSession session,PrintWriter out){
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
String fileName = "";
try
{
fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
session);//生成图片
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(out, fileName, info, false);
}
catch (IOException e)
{
e.printStackTrace();
}
out.flush();
return fileName;//返回生成图片的文件名
}

// public static void main(String[] args) throws FileNotFoundException {
// // step1:创建数据集对象
// PieDataset dataset = createDataSet();
//
// // step2:创建图表
// JFreeChart chart = createChart(dataset);
//
// // step3: 输出图表到Swing窗口
// //drawToFrame(chart);
//
// // step3: 输出图表到磁盘
// drawToOutputStream("D:\\mybook-pie.png", chart);
// }
}



如果是输入到页面

pieChart.jsp

<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="pojo.PieChartTest"%>
<%@ page import = "java.io.PrintWriter" %>
<%
PieChartTest chart=new PieChartTest();
String fileName=chart.drawToHtml(chart.createChart(chart.createDataSet()),session,new PrintWriter(out));
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
%>
<html>
<head>
<title> JFreeChart使用例子</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<img src="<%= graphURL %>" width="500" height="300" border="0" usemap="#<%= fileName %>">//注意这个“#”
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值