JFreeChart使用

第一种:直接输出,从别处转来

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

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.PiePlot3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

public class PieChartPicture {
	public static void main(String[] args) {
		PieDataset dataset = getDataSet();
		JFreeChart chart = ChartFactory.createPieChart3D(" 项目进度分布", // chart
																	// title
				dataset,// data
				true,// include legend
				true, false);
		chart.getLegend().setItemFont(new Font("宋体", Font.ITALIC, 12));
		PiePlot3D plot = (PiePlot3D) chart.getPlot();
		plot.setLabelFont(new Font("黑体", Font.BOLD, 10));
		// 图片中显示百分比:默认方式
		// plot.setLabelGenerator(new
		// StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
		// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0}={1}({2})", NumberFormat.getNumberInstance(),
				new DecimalFormat("0.00%")));
		// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0}={1}({2})"));
		// 设置背景色为白色
		chart.setBackgroundPaint(Color.white);
		// 指定图片的透明度(0.0-1.0)
		plot.setForegroundAlpha(1.0f);
		// 指定显示的饼图上圆形(false)还椭圆形(true)
		plot.setCircular(true);
		// 设置图标题的字体
		Font font = new Font(" 黑体", Font.CENTER_BASELINE, 20);
		TextTitle title = new TextTitle(" 项目状态分布");
		title.setFont(font);
		chart.setTitle(title);
		FileOutputStream fos_jpg = null;
		try {
			fos_jpg = new FileOutputStream("D:\\ 项目状态分布.jpg");
			ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 640, 480, null);
			fos_jpg.close();
		} catch (Exception e) {
		}
	}

	private static PieDataset getDataSet() {
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue(" 市场前期", new Double(10));
		dataset.setValue(" 立项", new Double(15));
		dataset.setValue(" 计划", new Double(10));
		dataset.setValue(" 需求与设计", new Double(10));
		dataset.setValue(" 执行控制", new Double(35));
		dataset.setValue(" 收尾", new Double(10));
		dataset.setValue(" 运维", new Double(10));
		return dataset;
	}
}

第二种,使用servlet

1、饼状图

公用类

import java.util.Random;


public class DataUtils {

	private static Random random = new Random();
	private static final int MAX_NUMBER = 100;

	/**
	 * 	随机在0到100间取数
	 * @return 
	 */
	public static int getRandomData() {
		return random.nextInt(MAX_NUMBER);
	}
}


import java.awt.Font;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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



public class JFreeChartServlet extends HttpServlet{

	private static final long serialVersionUID = -3798298158506030366L;

	public JFreeChartServlet() {
		super();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置返回类型为图片
		response.setContentType("image/png");
		// 获取数据集对象
		PieDataset dataset = createPieDataset();
		// 创建图形对象
		JFreeChart jfreechart = ChartFactory.createPieChart3D("08图书",
				dataset, true, true, false);
		jfreechart.getTitle().setFont(new Font("黑体",Font.BOLD,20));
		// 获得图表区域对象
		PiePlot pieplot = (PiePlot) jfreechart.getPlot();
		// 设置图表区域的标签字体
		pieplot.setLabelFont(new Font("宋体", 0, 12));
		// 设置图表区域无数据时的默认显示文字
		pieplot.setNoDataMessage("没有销售数据");
		// 设置图表区域不是圆形,由于是3D的饼形图,建议设置为false
		pieplot.setCircular(false);
		// 设置图表区域文字与图表区域的间隔距离,0.02表示2%
		pieplot.setLabelGap(0.02D);
		// 将图表已数据流的方式返回给客户端
		ChartUtilities.writeChartAsPNG(response.getOutputStream(), jfreechart,
				500, 270);
	}

	/**
	 * 返回数据集
	 * 
	 * @return
	 */
	private static PieDataset createPieDataset() {
		// 创建饼形图数据集对象
		DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
		// 分别图形区域的说明和数据
		defaultpiedataset.setValue("JAVA", DataUtils.getRandomData());
		defaultpiedataset.setValue("C/C++", DataUtils.getRandomData());
		defaultpiedataset.setValue("PHP", DataUtils.getRandomData());
		defaultpiedataset.setValue("JavaScript", DataUtils.getRandomData());
		defaultpiedataset.setValue("Ajax", DataUtils.getRandomData());
		return defaultpiedataset;
	}
}

web.xml配置

<servlet>
		<servlet-name>Pie Chart</servlet-name>
		<servlet-class>
			JFreeChartServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Pie Chart</servlet-name>
		<url-pattern>/pie</url-pattern>
	</servlet-mapping>
访问 http://localhost:8080/chart/pie可得图形,chart为工程名
2、柱状图

package com.helloweenvsfei.jfreechart;

import java.awt.Font;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarChartServlet extends HttpServlet {

	private static final long serialVersionUID = 227116552657325813L;

	public BarChartServlet() {
		super();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 设置返回类型为图片
		response.setContentType("image/png");
		// 获取数据集对象
		CategoryDataset dataset = createDataset();
		// 创建图形对象
		JFreeChart jfreechart = ChartFactory.createBarChart3D("08年图书销售量排名",
				"按季度", "销量", dataset, PlotOrientation.VERTICAL, true, true,
				false);
		jfreechart.getTitle().setFont(new Font("黑体",Font.BOLD,20));
		// 获得图表区域对象
		CategoryPlot categoryPlot = (CategoryPlot) jfreechart.getPlot();
		CategoryAxis domainAxis=categoryPlot.getDomainAxis();
		//水平底部列表
		domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));
		//水平底部标题
		domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
		//垂直标题
		ValueAxis rangeAxis=categoryPlot.getRangeAxis();//获取柱状
		rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
		// 设置网格线可见
		categoryPlot.setDomainGridlinesVisible(true);
		// 获得x轴对象
		CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
		// 设置x轴显示的分类名称的显示位置,如果不设置则水平显示
		// 设置后,可以斜像显示,但分类角度,图表空间有限时,建议采用
		categoryAxis.setCategoryLabelPositions(CategoryLabelPositions
				.createUpRotationLabelPositions(0.39269908169872414D));
		categoryAxis.setCategoryMargin(0.0D);
		// 获显示图形对象
		BarRenderer3D barRenderer3d = (BarRenderer3D) categoryPlot
				.getRenderer();
		// 设置不显示边框线
		barRenderer3d.setDrawBarOutline(false);
		// 将图表已数据流的方式返回给客户端
		ChartUtilities.writeChartAsPNG(response.getOutputStream(), jfreechart,
				500, 270);
	}

	/**
	 * 返回数据集
	 * 
	 * @return
	 */
	private static CategoryDataset createDataset() {
		// 时间维度
		String[] category1 = { "第一季度", "第二季度", "第三季度", "第四季度" };
		// 分类维度
		String[] category2 = { "JAVA", "C/C++", "PHP" };
		DefaultCategoryDataset defaultdataset = new DefaultCategoryDataset();
		for (int i = 0; i < category1.length; i++) {
			String category = category1[i];
			for (int j = 0; j < category2.length; j++) {
				String cat = category2[j];
				// 模拟添加数据
				defaultdataset.addValue(DataUtils.getRandomData(), cat, category);
			}
		}
		return defaultdataset;
	}

}

web.xml配置

<servlet>
		<servlet-name>BarChartServlet</servlet-name>
		<servlet-class>
			com.helloweenvsfei.jfreechart.BarChartServlet
		</servlet-class>
	</servlet>
<servlet-mapping>
		<servlet-name>BarChartServlet</servlet-name>
		<url-pattern>/bar</url-pattern>
	</servlet-mapping>

访问 http://localhost:8080/chart/bar可得图形,chart为工程名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值