JFreeChar生成柱状图

前一篇文章说明了JFreeChar生成柱状图以及解决中文只能显示问方框的问题,本文主要记录柱状图的显示案例,可供初学者参考:

先看一个简单的柱状图生成案例:

package org.ml.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

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.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class ChartDemoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public ChartDemoServlet() {
		super();
	}

	/**
	 * 创建一个数据集合
	 * 
	 * @return
	 */
	private static DefaultPieDataset getDataSet() {
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("苹果", 100);
		dataset.setValue("梨子", 200);
		dataset.setValue("葡萄", 300);
		dataset.setValue("香蕉", 400);
		dataset.setValue("荔枝", 500);
		return dataset;
	}

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		res.setContentType("image/jpeg");// 将输出设置为image/jepg格式
		 
		CategoryDataset dataset = getDataSet2();// 取得数据集合
		JFreeChart chart2 = ChartFactory.createBarChart3D("水果产量图", // 图表标题
				"水果", // 目录轴的显示标签
				"产量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // HORIZONTAL,// 图表方向:水平、垂直
				false, // 是否显示图例(对于简单的柱状图是false,因为只有一种,没有必要显示)
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		Font titleFont = new Font("黑体", Font.BOLD, 20);  
		Font plotFont = new Font("宋体", Font.PLAIN, 16);   
		
		TextTitle textTitle2 = chart2.getTitle();
		textTitle2.setFont(titleFont);// 为标题设置上字体
 
		CategoryPlot categoryPlot = chart2.getCategoryPlot();
		categoryPlot.getRangeAxis().setLabelFont(plotFont);// 设置Y轴标识字体
		categoryPlot.getDomainAxis().setLabelFont(plotFont);// 设置X轴标识字体
		categoryPlot.getDomainAxis().setTickLabelFont(plotFont);// 设置轴标记的坐标的标记字体
 
		ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart2,
				800, 450, null);// 输出图表
	}
 
	private static CategoryDataset getDataSet2() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(100, "", "苹果");
		dataset.addValue(200, "", "梨子");
		dataset.addValue(300, "", "葡萄");
		dataset.addValue(400, "", "香蕉");
		dataset.addValue(500, "", "荔枝");
		return dataset;
	}
}

这是一个简单的柱状图实例,只有各种水果产量之间的简单对比,下面看一个对各个城市之间的水果产量进行对比的例子:

package org.ml.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

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.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class ChartDemoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public ChartDemoServlet() {
		super();
	}

	/**
	 * 创建一个数据集合
	 * 
	 * @return
	 */
	// private static DefaultPieDataset getDataSet() {
	// DefaultPieDataset dataset = new DefaultPieDataset();
	// dataset.setValue("苹果", 100);
	// dataset.setValue("梨子", 200);
	// dataset.setValue("葡萄", 300);
	// dataset.setValue("香蕉", 400);
	// dataset.setValue("荔枝", 500);
	// return dataset;
	// }

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		res.setContentType("image/jpeg");// 将输出设置为image/jepg格式 

		CategoryDataset dataset = getDataSet3();// 取得数据集合
		JFreeChart chart2 = ChartFactory.createBarChart3D("水果产量图", // 图表标题
				"水果", // 目录轴的显示标签
				"产量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // HORIZONTAL,// 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图是false,因为只有一种,没有必要显示)
				false, // 是否生成工具
				false // 是否生成URL链接
				);
				
				
		Font titleFont = new Font("黑体", Font.BOLD, 20);  
		Font plotFont = new Font("宋体", Font.PLAIN, 16);  
		Font LegendFont = new Font("楷体", Font.PLAIN, 18); 
		
		TextTitle textTitle2 = chart2.getTitle();
		textTitle2.setFont(titleFont);// 为标题设置上字体

		LegendTitle legend2 = chart2.getLegend(0);
		legend2.setItemFont(LegendFont);// 为图例说明设置字体

		CategoryPlot categoryPlot = chart2.getCategoryPlot();
		categoryPlot.getRangeAxis().setLabelFont(plotFont);// 设置Y轴标识字体
		categoryPlot.getDomainAxis().setLabelFont(plotFont);// 设置X轴标识字体
		categoryPlot.getDomainAxis().setTickLabelFont(plotFont);// 设置轴标记的坐标的标记字体
 
		ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart2,
				800, 450, null);// 输出图表
	}

	private CategoryDataset getDataSet3() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(100, "北京", "苹果");
		dataset.addValue(100, "上海", "苹果");
		dataset.addValue(100, "广州", "苹果");
		dataset.addValue(200, "北京", "梨子");
		dataset.addValue(200, "上海", "梨子");
		dataset.addValue(200, "广州", "梨子");
		dataset.addValue(300, "北京", "葡萄");
		dataset.addValue(300, "上海", "葡萄");
		dataset.addValue(300, "广州", "葡萄");
		dataset.addValue(400, "北京", "香蕉");
		dataset.addValue(400, "上海", "香蕉");
		dataset.addValue(400, "广州", "香蕉");
		dataset.addValue(500, "北京", "荔枝");
		dataset.addValue(500, "上海", "荔枝");
		dataset.addValue(500, "广州", "荔枝");
		return dataset;
	} 
}
运行结果如下:



JFreeChar生成柱状图的方式和饼状图的大体一致,如果不清楚可以参考这里(点击进入).


你可能感兴趣的:(JFreeChar生成柱状图)