pom文件中添加jar包的引用

<!--用于生成图片  -->
<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.0.19</version>
</dependency>

项目代码

package com.jeeplus.modules.management.web;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;

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.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleInsets;

public class JFreeChartUtil {
	public static void main(String[] args) {
		pie();
		line();
		czZzt();
		spZzt();
	}
	//饼状图
	public static void pie() {
		DefaultPieDataset pds = new DefaultPieDataset();
		pds.setValue("00点-04点", 100);
		pds.setValue("04点-08点", 200);
		pds.setValue("08点-12点", 300);
		pds.setValue("12点-16点", 400);
		pds.setValue("16点-20点", 500);
		pds.setValue("20点-24点", 600);
		String filePath = "d:/pie.jpg";
		createPieChart(pds,filePath);
	}
	//折线图
	public static void line() {
		DefaultCategoryDataset ds = new DefaultCategoryDataset();
		ds.setValue(10, "ibm", "2018-05-21");
		ds.setValue(20, "ibm", "2018-05-22");
		ds.setValue(32, "ibm", "2018-05-23");
		ds.setValue(25, "ibm", "2018-05-24");
		ds.setValue(0, "ibm", "2018-05-25");
		ds.setValue(4, "ibm", "2018-05-26");
		ds.setValue(32, "ibm", "2018-05-27");
		ds.setValue(0, "ibm", "2018-05-28");
		ds.setValue(358, "ibm", "2018-05-29");
		ds.setValue(4, "ibm", "2018-05-30");
		String filePath = "d:/lgg.jpg";
		createLineChart(ds,filePath);
	}
	//水平柱状图柱状图
	public static void spZzt() {
		JFreeChart chart = ChartFactory.createBarChart("环境污染指数分布图",
				"", "", createDataset2(),PlotOrientation.HORIZONTAL, //显示方向 
				false, //是否显示图例如图一的均值、差值 
				false, // 是否生成工具 
				false); // 是否生成URL链接 
		iSetBarSpChart(chart);
		try {
			ChartUtilities.saveChartAsJPEG(new File("d:/spZzt.jpg"),chart, 800,500);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//垂直柱状图
	public static void czZzt() {
		JFreeChart chart = ChartFactory.createBarChart("环境污染指数分布图",
				"城市", "污染指数", createDataset2(),PlotOrientation.VERTICAL, //显示方向 
				false, //是否显示图例如图一的均值、差值 
				false, // 是否生成工具 
				false); // 是否生成URL链接 
		iSetBarCzChart(chart);
		try {
			ChartUtilities.saveChartAsJPEG(new File("d:/czZzt.jpg"),chart, 800,500);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 数据集合
	 * 
	 * @return
	 */
	public static CategoryDataset createDataset2() {
		DefaultCategoryDataset result = new DefaultCategoryDataset();

		String series1 = "海南";
	    String series2 = "青藏";
	    String series3 = "青海";
	    String series4 = "上海";
	    String series5 = "北京";
	    String series6 = "山西";
	    String type1 = "城市状况";
	    result.addValue(0.1, type1, series1);
	    result.addValue(0.2, type1, series2);
	    result.addValue(0.3, type1, series3);
	    result.addValue(0.4, type1, series4);
	    result.addValue(0.5, type1, series5);
	    result.addValue(0.7, type1, series6);
		return result;

	}
	/**
	 * 水平柱状图的样式
	 * 
	 * @param chart
	 */
	public static void iSetBarSpChart(JFreeChart chart) {
		CategoryPlot categoryplot = chart.getCategoryPlot();// 图本身
	    ValueAxis rangeAxis = categoryplot.getRangeAxis();
	    CategoryAxis domainAxis = categoryplot.getDomainAxis();
	    // 设置Y轴的提示文字样式
	    rangeAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
	    // 设置Y轴刻度线的长度
	    rangeAxis.setTickMarkInsideLength(10f);

	    // rangeAxis.setTickMarkOutsideLength(10f);
	    // 设置X轴下的标签文字
	    domainAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
	    // 设置X轴上提示文字样式
	    domainAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
	    // 设置Y轴的数字为百分比样式显示 start
//	    NumberAxis vn = (NumberAxis) categoryplot.getRangeAxis();
//		DecimalFormat df = new DecimalFormat("0.0%");
//		vn.setNumberFormatOverride(df);
		// 设置Y轴的数字为百分比样式显示 end
		// 使柱状图反过来显示
//		 vn.setInverted(true);
//		 vn.setVerticalTickLabels(true);

		// 自定义柱状图中柱子的样式
		BarRenderer brender = (BarRenderer) categoryplot.getRenderer(); 

		// 设置柱状图的顶端显示数字 
		brender.setIncludeBaseInRange(true); 
		brender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
		brender.setBaseItemLabelsVisible(true); 
		// 设置柱子为平面图不是立体的 
		brender.setBarPainter(new StandardBarPainter()); 
		// 设置柱状图之间的距离0.1代表10%; 
//		brender.setItemMargin(0.1); 
		// 设置柱子的阴影,false代表没有阴影
		brender.setShadowVisible(false);
		
		// 设置图的背景为白色
		categoryplot.setBackgroundPaint(Color.WHITE);
		// 设置背景虚线的颜色
		categoryplot.setRangeGridlinePaint(Color.decode("#B6A2DE"));
		// 去掉柱状图的背景边框,使边框不可见
		categoryplot.setOutlineVisible(false);
		// 设置标题的字体样式
		chart.getTitle().setFont(new Font("微软雅黑", Font.PLAIN, 24));
		// 设置图表下方图例上的字体样式
		/*------这句代码解决了底部汉字乱码的问题-----------*/  
//        chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));

		categoryplot.setRenderer(brender);
	}
	/**
	 * 垂直柱状图的样式
	 * 
	 * @param chart
	 */
	public static void iSetBarCzChart(JFreeChart chart) {
		CategoryPlot categoryplot = chart.getCategoryPlot();// 图本身
		ValueAxis rangeAxis = categoryplot.getRangeAxis();
		CategoryAxis domainAxis = categoryplot.getDomainAxis();
		// 设置Y轴的提示文字样式
		rangeAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		// 设置Y轴刻度线的长度
		rangeAxis.setTickMarkInsideLength(10f);

		// rangeAxis.setTickMarkOutsideLength(10f);
		// 设置X轴下的标签文字
		domainAxis.setLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		// 设置X轴上提示文字样式
		domainAxis.setTickLabelFont(new Font("微软雅黑", Font.PLAIN, 12));
		NumberAxis vn = (NumberAxis) categoryplot.getRangeAxis();

		// 设置Y轴的数字为百分比样式显示
		DecimalFormat df = new DecimalFormat("0.0%");
		vn.setNumberFormatOverride(df);
		// 使柱状图反过来显示
		// vn.setInverted(true);
		// vn.setVerticalTickLabels(true);

		// 自定义柱状图中柱子的样式
		BarRenderer brender = new BarRenderer();
		brender.setSeriesPaint(1, Color.decode("#C0504D")); // 给series1 Bar
		brender.setSeriesPaint(0, Color.decode("#E46C0A")); // 给series2 Bar
		brender.setSeriesPaint(2, Color.decode("#4F81BD")); // 给series3 Bar
		brender.setSeriesPaint(3, Color.decode("#00B050")); // 给series4 Bar
		brender.setSeriesPaint(4, Color.decode("#7030A0")); // 给series5 Bar
		brender.setSeriesPaint(5, Color.decode("#00BF00")); // 给series6 Bar
		// 设置柱状图的顶端显示数字
		brender.setIncludeBaseInRange(true);
		brender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		brender.setBaseItemLabelsVisible(true);
		// 设置柱子为平面图不是立体的
		brender.setBarPainter(new StandardBarPainter());
		// 设置柱状图之间的距离0.1代表10%;
		brender.setItemMargin(0.1);
		// 设置柱子的阴影,false代表没有阴影
		brender.setShadowVisible(false);

		// 设置图的背景为白色
		categoryplot.setBackgroundPaint(Color.WHITE);
		// 设置背景虚线的颜色
		categoryplot.setRangeGridlinePaint(Color.decode("#B6A2DE"));
		// 去掉柱状图的背景边框,使边框不可见
		categoryplot.setOutlineVisible(false);
		// 设置标题的字体样式
		chart.getTitle().setFont(new Font("微软雅黑", Font.PLAIN, 24));
		// 设置图表下方图例上的字体样式
		/*------这句代码解决了底部汉字乱码的问题-----------*/  
//		chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));

		categoryplot.setRenderer(brender);
	}


	/**
	 * 饼图
	 * @param pds
	 * @param filePath
	 */
	public static void createPieChart(DefaultPieDataset pds, String filePath) {
		try {
			// 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接
			JFreeChart chart = ChartFactory.createPieChart("今日放屁次数:时间段分布图", pds, false, false, true);
			// 如果不使用Font,中文将显示不出来
			Font font = new Font("宋体", Font.BOLD, 12);
			// 设置图片标题的字体
			chart.getTitle().setFont(font);
			// 得到图块,准备设置标签的字体
			PiePlot plot = (PiePlot) chart.getPlot();
			// 设置标签字体
			plot.setLabelFont(font);
			plot.setStartAngle(new Float(3.14f / 2f));
			plot.setOutlineVisible(false); 
			// 设置plot的前景色透明度
			plot.setForegroundAlpha(0.7f);
			// 设置plot的背景色透明度
			plot.setBackgroundAlpha(0.0f);
			// 设置标签生成器(默认{0})
			// {0}:key {1}:value {2}:百分比 {3}:sum
			plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}占{2})"));
			// 将内存中的图片写到本地硬盘
			ChartUtilities.saveChartAsJPEG(new File(filePath), chart, 600, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}  
	}
	/**
	 * 折线图
	 * @param ds
	 * @param filePath
	 */
	public static void createLineChart(DefaultCategoryDataset ds, String filePath) {
		try {
			// 创建柱状图.标题,X坐标,Y坐标,数据集合,orientation,是否显示legend,是否显示tooltip,是否使用url链接
			JFreeChart chart = ChartFactory.createLineChart("近30天每日放屁次数趋势图", "", "次数", ds, PlotOrientation.VERTICAL,false, true, true);
			chart.setBackgroundPaint(Color.WHITE);
			Font font = new Font("宋体", Font.BOLD, 12);
			chart.getTitle().setFont(font);
			chart.setBackgroundPaint(Color.WHITE);
			// 配置字体(解决中文乱码的通用方法)
			Font xfont = new Font("仿宋", Font.BOLD, 12); // X轴
			Font yfont = new Font("宋体", Font.BOLD, 12); // Y轴
			Font titleFont = new Font("宋体", Font.BOLD, 12); // 图片标题
			CategoryPlot categoryPlot = chart.getCategoryPlot();
			categoryPlot.getDomainAxis().setLabelFont(xfont);
			categoryPlot.getDomainAxis().setLabelFont(xfont);
			categoryPlot.getRangeAxis().setLabelFont(yfont);
			chart.getTitle().setFont(titleFont);
			categoryPlot.setBackgroundPaint(Color.WHITE);
			// x轴 // 分类轴网格是否可见
			categoryPlot.setDomainGridlinesVisible(true);
			// y轴 //数据轴网格是否可见
			categoryPlot.setRangeGridlinesVisible(true);
			// 设置网格竖线颜色
			categoryPlot.setDomainGridlinePaint(Color.LIGHT_GRAY);
			// 设置网格横线颜色
			categoryPlot.setRangeGridlinePaint(Color.LIGHT_GRAY);
			// 没有数据时显示的文字说明
			categoryPlot.setNoDataMessage("没有数据显示");
			// 设置曲线图与xy轴的距离
			categoryPlot.setAxisOffset(new RectangleInsets(0d, 0d, 0d, 0d));
			// 设置面板字体
			Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
			// 取得Y轴
			NumberAxis rangeAxis = (NumberAxis) categoryPlot.getRangeAxis();
			rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
			rangeAxis.setAutoRangeIncludesZero(true);
			rangeAxis.setUpperMargin(0.20);
			rangeAxis.setLabelAngle(Math.PI / 2.0);
			// 取得X轴
			CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
			// 设置X轴坐标上的文字
			categoryAxis.setTickLabelFont(labelFont);
			// 设置X轴的标题文字
			categoryAxis.setLabelFont(labelFont);
			// 横轴上的 Lable 45度倾斜
			categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
			// 设置距离图片左端距离
			categoryAxis.setLowerMargin(0.0);
			// 设置距离图片右端距离
			categoryAxis.setUpperMargin(0.0);
			// 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
			LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
			// 是否显示折点
			lineandshaperenderer.setBaseShapesVisible(true);
			// 是否显示折线
			lineandshaperenderer.setBaseLinesVisible(true);
			// series 点(即数据点)间有连线可见 显示折点数据
			lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			lineandshaperenderer.setBaseItemLabelsVisible(true);
			ChartUtilities.saveChartAsJPEG(new File(filePath), chart, 1207, 500);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}