`
newlife111
  • 浏览: 6399 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

jfreechart实现柱状图排序

阅读更多
     今天在网上查了一下,没有发现 Jfreechart柱状图排序的实现方法,也还没来得及研究Jfreechart的代码和文档,所以就自己实现了一下。可能jfreechart自身有这个功能,可是发现以前的这个功能无效了,不知道用什么新方法实现这个功能了,所以只好自己实现了。
     
package my;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * jfreechart排序柱状图.
 */
public class MyBarPic extends ApplicationFrame {

    /**
     * 
     * 构造函数,进行初始化操作
     *
     * @param title  the frame title.
     */
    public MyBarPic(String title) {
        super(title);
        CategoryDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart, false);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartPanel);
        saveAsFile(chart, "D:\\图\\第一.jpg", 430, 200);
    }

    
/**
 * 生成数据集
 * 
 * @return
 */
private static CategoryDataset createDataset() {

	/**
	 * 
	 * 数据集数据存放对象
	 * 
	 * @author newlife111
	 *
	 */
	class ThreeData  implements Comparator{
		String rowKey;//行标签
		String colKey;//列标签
		double value;//值
		
		ThreeData(){
		}
		
		ThreeData(double value, String rowKey, String colKey){
			this.value = value;
			this.rowKey = rowKey;
			this.colKey = colKey;
		}
		
		/*
		 * 比较的算法
		 */
		public int compare(Object obj1, Object obj2) {
			double valueTmp = ((ThreeData)obj1).value - ((ThreeData)obj2).value;
			return valueTmp > 0 ? -1 : (valueTmp < 0 ? 1 : 0); 
		}
		
	}

	/*
	 * 存放数据
	 */
	List list = new ArrayList();
	list.add(new ThreeData(100.00d, "xx", "苹\n果"));
	list.add(new ThreeData(200.00d, "xx", "葡\n萄"));
	list.add(new ThreeData(50.00d, "xx", "雪\n梨"));
	list.add(new ThreeData(24.00d, "xx", "香\n蕉"));
	list.add(new ThreeData(65.00d, "xx", "橘\n子"));
	list.add(new ThreeData(125.00d, "xx", "柑\n橘"));
	list.add(new ThreeData(198.00d, "xx", "柚\n子"));
	list.add(new ThreeData(160.00d, "xx", "草\n莓"));
	//进行排序
	Collections.sort(list,new ThreeData());
	
	/*
	 * 添加数据进数据集
	 */
	DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	Iterator iter = list.iterator();
	while(iter.hasNext()) {
		ThreeData threeDataTmp = (ThreeData)iter.next();
		dataset.addValue(threeDataTmp.value, threeDataTmp.rowKey, threeDataTmp.colKey);
	}
	return dataset;
}

    /**
     * 生成图片.
     *
     * @param dataset  数据集.
     *
     * @return chart 图片对象
     */
    private static JFreeChart createChart(CategoryDataset dataset) {
        JFreeChart chart = ChartFactory.createBarChart(
            "xxx",       // 图片标题
            "xxx",               // 横轴标题
            "xxx",                  // 纵轴标题
            dataset,                  // 数据集
            PlotOrientation.VERTICAL, // 图形方向
            true,                     // 是否legend
            true,                     // 图形提示
            false                     // 图形url
        );
        //设置图片背景色
        chart.setBackgroundPaint(Color.white);
        //获得数据区对象
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        //设置图形背景色
        plot.setBackgroundPaint(Color.white);
        //横轴网格显示
        plot.setDomainGridlinesVisible(true);
        //横轴网格颜色
        plot.setRangeGridlinePaint(Color.black);
        
        /*
         * 图形相关设置
         */        
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        renderer.setBaseItemLabelFont(new Font("黑体", Font.BOLD, 12));
        renderer.setBaseLegendTextFont(new Font("Simsun", 0, 10));
        renderer.setBaseItemLabelsVisible(true);
        renderer.setMaximumBarWidth(0.05f);
        renderer.setDrawBarOutline(false);
        renderer.setShadowVisible(false);
        
        /*
         * 纵轴相关设置
         */
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setLabelFont(new Font("Simsun", 0, 12));

        /*
         * 图形1颜色设置
         */
        GradientPaint gp0 = new GradientPaint(0.5f, 0.5f, new Color(100,100,255),
                0.0f, 0.0f, new Color(0, 0, 64));
        renderer.setSeriesPaint(0, gp0);
        
        /*
         * 横轴相关设置
         */
        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setLabelFont(new Font("Simsun", Font.BOLD, 12));
        //Font.BOLD字符加粗可使标签显示清楚些
        domainAxis.setTickLabelFont(new Font("Simsun", Font.BOLD, 8));
        domainAxis.setLowerMargin(0.03f);
        //这里设置横轴标签可显示行数,在数据集的横轴字符串上用\n可实现标签字符垂直
        domainAxis.setMaximumCategoryLabelLines(255);
        domainAxis.setCategoryLabelPositionOffset(3);
        return chart;
    }

    /**
     * 程序入口
     *
     * @param args  
     */
    public static void main(String[] args) {
        MyBarPic demo = new MyBarPic("FirstPic");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
    
	/**
	 * 
	 * 保存为文件
	 * 
	 * @param chart 图片对象
	 * @param outputPath 保存路径
	 * @param weight 宽
	 * @param height 高
	 */
	public static void saveAsFile(JFreeChart chart, String outputPath,
			int weight, int height) {
		FileOutputStream out = null;
		try {
			File outFile = new File(outputPath);
			if (!outFile.getParentFile().exists()) {
				outFile.getParentFile().mkdirs();
			}
			out = new FileOutputStream(outputPath);
			//保存为JPEG
			ChartUtilities.writeChartAsJPEG(out,chart,800,600);
			out.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					
				}
			}
		}
	}

}

分享到:
评论

相关推荐

    JfreeChart

    JFreeChart 是一个强大的 Java 图表库,用于生成各种类型的图表,包括饼图、柱状图、线形图、区域图和甘特图等。它是一个开源项目,可以在服务端生成图表的图片,便于在浏览器上动态显示,尤其适用于B/S架构的应用。...

    Java水晶报表 JFreeChart使用

    JFreeChart是Java领域中一个广泛使用的开源库,它提供了丰富的图表类型,如柱状图、饼图、线图、散点图等,使得开发者能够方便地创建高质量的可视化效果。 JFreeChart的主要特点包括: 1. **图表类型丰富**:...

    jfreechart-1.0.13-javadocs 资料大全英文版

    JFreeChart 是一个开源的Java库,用于生成高质量的图表,包括线图、饼图、柱状图、散点图等,广泛应用于报表、数据分析和可视化应用中。本资料大全基于JFreeChart 1.0.13版本,包含了详尽的JavaDocs文档,是学习和...

    jasper+ireport+jfreechart导出html.excel.word.pdf

    通过集成JFreeChart,JasperReports可以生成各种统计图表,如柱状图、饼图、线图等。在报表中插入图表,可以帮助用户更直观地理解数据分布和趋势。 在导出方面,JasperReports支持多种输出格式。HTML格式适合在网页...

    javaweb项目报表案例

    JFreeChart是一个强大的Java图表库,能够生成多种类型的图表,如柱状图、饼图、线图、散点图等,适用于各种数据可视化需求。在JavaWeb项目中,JFreeChart可以通过生成图像流并在JSP页面上显示,或者将图表保存为静态...

    JAVA实现的单词统计、绘制图表程序

    Java提供了多种库用于数据可视化,例如JFreeChart,它能够创建各种类型的图表,包括柱状图、饼图等,非常适合用于显示单词频率。使用JFreeChart,你需要创建一个`CategoryDataset`对象来存储数据,再创建对应的`...

    java图形可视化学生成绩

    JFreeChart提供了丰富的图表类型,包括柱状图、饼图、线图等,可以轻松地将成绩数据转换成可视化图形。例如,我们可以通过创建CategoryDataset来组织数据,然后使用ChartFactory创建对应的图表,并最后将其嵌入到...

    三测单源码,简单操作画布

    4. **数据可视化**:将测量结果以图表形式展示在画布上,可能涉及到折线图、柱状图等,需要了解基本的数据可视化原理。 5. **响应式设计**:确保界面在不同设备和屏幕尺寸上都能正常显示,可能需要用到媒体查询和...

    java读取excel文件,并绘制统计图分析excel内的成绩分布情况

    接下来,可以创建一个`CategoryDataset`,其中包含你要可视化的数据,然后使用`JFreeChart`的`createBarChart()`方法创建柱状图: ```java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); // ...

    零基础学Java Web源代码7,11章,习题答案

    其次,JFreeChart是一个强大的Java库,用于创建各种类型的图表,如折线图、柱状图、饼图和散点图等,对于数据分析和展示至关重要。在第11章中,你可能学习了如何使用JFreeChart来生成动态的、交互式的图表。这涉及到...

    Java中图形化报表实例

    图形化报表则进一步将数据以图形的形式展示,如柱状图、饼图、折线图等,使得数据趋势和关系一目了然。在JavaWeb环境中,这种报表通常用于后台管理系统,帮助管理者监控业务指标、分析数据变化。 实现JavaWeb中的...

    报表制作(SSH)

    JFreeChart是我们在报表制作中使用的工具,它是Java平台上一个强大的图表库,可以生成各种类型的图表,包括柱状图、饼图、线图、散点图等。在SSH框架下,我们可以结合JFreeChart来创建动态的、可视化的报表: 1. **...

    Data Structures and Algorithms with Scala

    数据可视化工具和库,如Java的JFreeChart或Scala的Breeze-Viz,可以用于创建各种图表,如折线图、柱状图、散点图等。学习如何结合使用数据结构、算法和可视化技术,可以增强我们分析和解释大量数据的能力。 综上所...

    JAVA版学生成绩分析程序综合性实验报告

    - 程序能够生成柱状图和饼图,对成绩进行可视化分析。 - 可能使用Java的`JFreeChart`库或者其他图形库生成图表,并在新的窗口中显示。 6. **查询与排序**: - 用户可以通过输入学号、姓名或成绩的片段进行模糊...

    java 项目书

    - **实现思路**:连接数据库获取数据,使用Java Swing/AWT构建图形界面,借助图表库绘制柱状图、折线图、饼图等。 **3. 电子英汉词典** - **知识点**:数据库设计与操作、图形界面构建。 - **技术栈**:JDBC、Java...

    jcommon源码jcommon源码

    `Chart`部分提供了创建各种图表的能力,如折线图、柱状图、饼图等;而`Table`部分则处理数据的展示和操作,可以用来创建复杂的表格布局。 **图表绘制** JCommon的图表功能是基于Apache Batik SVG库的,它允许...

    用Java展示统计图表.rar_Java方差_java 方差_java 统计图_回归 Java_相关系数

    对于Java实现统计图表,可以利用JFreeChart库,它提供了一个丰富的API来创建各种类型的图表,包括柱状图、折线图、饼图等。通过设置数据集,配置图表属性,可以生成美观且具有专业级别的统计图表。 在实际应用中,...

Global site tag (gtag.js) - Google Analytics