`

JfreeChart生成柱状图

阅读更多
JfreeChartshi一个强大的Java开源插件,最近在学习使用它,就把学习以后写得一些代码贴出来吧,我写的第一个程序使用JfreeChart生成柱状图。
其实使用JfreeChart生成各种图表的步骤是差不多的啊
1.实例化你要生成的图表对应的数据集。
2.从ChartFactory中得到对应的Chart实例
3.设置图表的背景,可以通过plot和render
4.利用ChartUtilities保存图片。
5.显示图片。
当然有些步骤你可以省略,比如第散步和第五步。
下面是我写的代码:
package com.mj.template;

import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
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.DefaultCategoryDataset;
/*
 *@author mj
 */
public class MyBar {
	public MyBar(){
		init();
	}
	private void init(){
		DefaultCategoryDataset dataset=getDataSet();
		JFreeChart chart=ChartFactory.createBarChart3D("My first JfreeChar programe", "Compare", "Weight", 
													dataset,PlotOrientation.VERTICAL, false, false, false);
		CategoryPlot plot=chart.getCategoryPlot();
		//设置图表的横轴
		CategoryAxis axis=plot.getDomainAxis();
		//设置图片左端距离,此时为10%
		axis.setLowerMargin(0.1);
		//设置右端距离,此时10%
		axis.setUpperMargin(0.1);
		//设置横轴与标签之间的距离为10像素
		axis.setCategoryLabelPositionOffset(10);
		//设置标签之间的距离为20%
		axis.setCategoryMargin(0.2);
		
		
		//设置纵轴
		ValueAxis valueaxis=plot.getRangeAxis();
		//设置最高的一个柱与图片顶端的距离是10%
		valueaxis.setUpperMargin(0.1);
		
		//设置图表的颜色,好像边框的颜色设置没有起到作用,郁闷
		BarRenderer3D render=new BarRenderer3D();
		render.setBaseOutlinePaint(Color.RED);
		//设置“一年前”柱子的颜色为绿色
		render.setSeriesPaint(0, Color.GREEN);
		//设置“一年前”柱子的边框颜色为蓝色
		render.setSeriesOutlinePaint(0, Color.BLUE);
		//设置“now"柱子的颜色为黄色
		render.setSeriesPaint(1, Color.YELLOW);
		//设置"now"柱子的边框颜色为黑色
		render.setSeriesOutlinePaint(1, Color.BLACK);
		//一组内两个柱子间的宽度为组宽的10%
		render.setItemMargin(0.1);
		//使设置生效
		plot.setRenderer(render);
		
		//设置总横坐标的显示位置
		plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//设置compare位于横轴的左侧或下端
		plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//设置weight位于纵轴的左端或下侧
		
		//将报表保存为文件
		File file=new File("c:/jiange.png");
		try {
			ChartUtilities.saveChartAsPNG(file,chart, 400, 300);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//将报表显示当窗口当中
		final ChartFrame frame=new ChartFrame("第一个柱状图",chart);
		//设置关闭操作,貌似不用这么写
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e) {
				//释放所占的资源
				frame.dispose();				
			}
		});
		frame.pack();
//		frame.setSize(800, 800);
		frame.setVisible(true);
	}
	public DefaultCategoryDataset getDataSet(){
		DefaultCategoryDataset dataset=new DefaultCategoryDataset();
		dataset.addValue(120, "One Years Ago", "TM");
		dataset.addValue(130, "Now", "TM");
		dataset.addValue(110, "One Years Ago", "MJ");
		dataset.addValue(100, "Now", "MJ");
		dataset.addValue(156, "One Years Ago", "Yaoming");
		dataset.addValue(200, "Now", "Yaoming");
		return dataset;
	}
	public static void main(String[] args){
		new MyBar();
	}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics