jfreechart做报表分析

jfreechart是jfree公司提供的一个java项目,它主要用来实现各种图表,包括:饼图,柱状图(普通柱状图和堆栈柱状图),折线图,区域图,分布图,混合图,甘特图,以及一些仪表盘等。

官方网站:http://jfree.org/。

需要的java包


效果如



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

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.TextAnchor;


public class JfreecharImage {

	
	public void jfreechartOne() {

		DefaultPieDataset data = new DefaultPieDataset();
		data.setValue("枇杷", 10);
		data.setValue("梨子", 20);
		data.setValue("葡萄", 30);
		data.setValue("香蕉", 40);

		JFreeChart chart = ChartFactory.createPieChart3D("",// 标题
				data,// 数据
				false,// lenged
				false,// 工具提示
				false);// url
		// ChartFrame cf=new ChartFrame("标题", chart);
		// cf.pack();
		// cf.setVisible(true);

		try {

			File f = new File("image/jfreechartOne.jpg");
			FileOutputStream fout = new FileOutputStream(f);

			ChartUtilities.writeChartAsJPEG(fout, chart, 664, 364);

			fout.close();

			System.out.println("ol..................");

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	
	public void jfreechartScond() {
		DefaultPieDataset data = new DefaultPieDataset();
		data.setValue("苹果", 22222);
		data.setValue("栗子", 5);
		data.setValue("香蕉", 2323);
		data.setValue("火龙果", 88);

		JFreeChart chart = ChartFactory.createPieChart3D("jfreechart",// 标题
				data,// 数据
				false,// 图例
				true,// 工具提示
				false);// url
		try {

			// 设置背景颜色
			// chart.setBackgroundImage(ImageIO.read(new
			// File("image/20120802170352_VvAPd.jpeg")));
			//要写入的图片
			File f = new File("image/jfreechartScond.jpg");
			// 得到图块
			PiePlot plot = (PiePlot) chart.getPlot();
			// 设置图片块的背景颜色
			// plot.setBackgroundImage(ImageIO.read(new
			// File("image/20120802170352_VvAPd.jpeg")));
			//图块区域设置
			plot.setForegroundAlpha(1.0f);
			plot.setNoDataMessage("暂无数据显示");
			plot.setLabelBackgroundPaint(null);// 设置标签的背景颜色
			plot.setLabelOutlinePaint(null);// 标签边框颜色
			plot.setLabelShadowPaint(null);// 标签阴影颜色
			plot.setBackgroundPaint(java.awt.Color.GRAY);// 设置报表块颜色
			//图块外设置
			plot.setOutlinePaint(java.awt.Color.GRAY);// 设置绘图面板外边颜色
			chart.setBackgroundPaint(java.awt.Color.GRAY);// 图片外边颜色
			chart.setBorderVisible(false);// 外边边框不可见
			
			//图例设置
			LegendTitle legendTitle = new LegendTitle(plot);//创建图例
			legendTitle.setBorder(1, 1, 1, 2);//设置四周的边距,带线框.
			legendTitle.setPosition(RectangleEdge.RIGHT);  //设置图例的位置
			chart.addLegend(legendTitle);//图表中添加图例
			
			
			/*
			 图例中的其他方法
			setBackgroundPaint(Paint paint)   可设置图例的背景色
			setTitle(String title)    图示标题内容
			setTitleFont(Font font)    图示标题字体
			setBoundingBoxArcWidth(int arcWidth)  图示边界圆角宽
			setBoundingBoxArcHeight(int arcHeight)  图示边界圆角高
			setOutlinePaint(Paint paint)   图示边界线条颜色
			setOutlineStroke(Stroke stroke)   图示边界线条笔触
			setDisplaySeriesLines(boolean flag)  图示项是否显示横线(折线图有效)
			setDisplaySeriesShapes(boolean flag)  图示项是否显示形状(折线图有效)
			setItemFont(Font font)    图示项字体
			setItemPaint(Paint paint)    图示项字体颜色
			setAnchor(int anchor)    图示在图表中的显示位置(参数常量在Legend类中定义)
			*/
			//文件输出流
			FileOutputStream fout = new FileOutputStream(f);
			//写入图片
			ChartUtilities.writeChartAsJPEG(fout, chart, 664, 364);
			fout.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public void JfreechartTwo(){
		

		//设置支持中文
		StandardChartTheme standardChartTheme = new StandardChartTheme("CN");  
		//设置标题字体 
		standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
		//设置图例的字体  
		standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 12));  
		//设置轴向的字体  
		standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 12));  
		
		ChartFactory.setChartTheme(standardChartTheme); 	
		
		double[][] data = new double[][] {{1230,1110,1120,1210}, {720,750,860,800}, {830,780,790,700,}, {400,380,390,450}};  
		double [] [] datas=new double[][]{{232,23432},{2343,222},{232,23432},{2343,222}};
		String[] rowKeys = {"苹果", "香蕉","栗子","樱桃"};  
		String[] columnKeys = {"鹤壁","西安","北京","山西"};  
		CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);   
		File f = new File("image/JfreechartTwo.jpg");
		JFreeChart chart = ChartFactory.createBarChart3D("水果销量统计图",   
		                  "水果",  
		                  "销量",  
		                  dataset,  
		                  PlotOrientation.VERTICAL,  
		                  true,  
		                  true,  
		                  false);  
		CategoryPlot plot = chart.getCategoryPlot();    
		//设置网格背景颜色  
		plot.setBackgroundPaint(java.awt.Color.white);  
		//设置网格竖线颜色  
		plot.setDomainGridlinePaint(java.awt.Color.pink);  
		//设置网格横线颜色  
		plot.setRangeGridlinePaint(java.awt.Color.pink);  
		plot.setBackgroundPaint(java.awt.Color.GRAY);
		chart.setBackgroundPaint(java.awt.Color.gray);
		plot.setOutlinePaint(java.awt.Color.gray);
		//显示每个柱的数值,并修改该数值的字体属性  
		BarRenderer3D renderer = new BarRenderer3D();  
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());  
		renderer.setBaseItemLabelsVisible(true);  
		  
		//默认的数字显示在柱子中,通过如下两句可调整数字的显示  
		//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题  
		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));  
		renderer.setItemLabelAnchorOffset(10D);  
		  
		//设置每个地区所包含的平行柱的之间距离  
		renderer.setItemMargin(0.4);  
		plot.setRenderer(renderer);  
		  
		//设置地区、销量的显示位置  
		//将下方的“肉类”放到上方  
		//plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);  
		//将默认放在左边的“销量”放到右方  
		//plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);  
		try {
		//文件输出流
		FileOutputStream fout = new FileOutputStream(f);
		//写入图片
		ChartUtilities.writeChartAsJPEG(fout, chart, 664, 364);
		
			fout.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	public static void main(String[] args) {
		
		
		JfreecharImage jf=new JfreecharImage();
		jf.jfreechartOne();
		jf.jfreechartScond();
		jf.JfreechartTwo();
	}
	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值