`
wasw100
  • 浏览: 127192 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jfreechart使用小结

    博客分类:
  • java
阅读更多

参考文章:使用 JFreeChart来创建基于web的图表

一些jfreechart的api:http://topic.csdn.net/t/20050925/03/4292228.html

 

要建立类似下面的报表(折线图和柱状图都存在,图片不好贴,直接给个flicckr地址):http://www.flickr.com/photos/44025540@N03/4241013620/

 

生成的报表图片

 

先贴段代码,用到的地方尽量加载注释里:

 

package com.wasw100.chart;

import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

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.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

/**
 * 
 * @author wasw100
 * 
 */

public class ChartTest {

	/**
	 * @param stuScoreMap
	 * @return
	 */
	private static DefaultCategoryDataset getDataSet(
			Map<String, Number> scoreMap, String category) {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		// 遍历Map
		for (String key : scoreMap.keySet()) {
			double value = scoreMap.get(key).doubleValue();
			dataset.setValue(value, category, key);
		}
		return dataset;
	}

	/**
	 * 
	 * @param stuScoreMap
	 *            学生成绩
	 * @param avgScoreMap
	 *            班级平均成绩
	 * @return
	 */
	private static JFreeChart getChart(Map<String, Number> stuScoreMap,
			Map<String, Number> avgScoreMap) {

		CategoryPlot categoryPlot = new CategoryPlot();

		// 横轴、纵轴显示的标题
		categoryPlot.setDomainAxis(new CategoryAxis(""));
		categoryPlot.setRangeAxis(new NumberAxis("分数"));

		// 显示的方向,横向还是纵向?
		// categoryPlot.setOrientation(PlotOrientation.VERTICAL);
		// 设置是否显示水平网格线
		categoryPlot.setRangeGridlinesVisible(true);
		// 设置是否显示垂直网格线
		// categoryPlot.setDomainGridlinesVisible(true);

		DefaultCategoryDataset avgData = getDataSet(avgScoreMap, "班级平均成绩");// 得到数据集

		LineAndShapeRenderer lineAndShapeRenderer = new LineAndShapeRenderer();
		// 不显示线条
		lineAndShapeRenderer.setBaseLinesVisible(false);

		// 将线条添加进图表
		categoryPlot.setRenderer(lineAndShapeRenderer);
		categoryPlot.setDataset(avgData);

		// lineAndShapeRenderer的数值显示出来
		StandardCategoryItemLabelGenerator standardcategoryitemlabelgenerator = new StandardCategoryItemLabelGenerator();
		lineAndShapeRenderer
				.setBaseItemLabelGenerator(standardcategoryitemlabelgenerator);
		lineAndShapeRenderer.setBaseItemLabelsVisible(true);

		// 个人成绩的添加
		DefaultCategoryDataset stuData = getDataSet(stuScoreMap, "成绩");// 得到数据集
		BarRenderer barRenderer = new BarRenderer();// 柱状图渲染器
		categoryPlot.setDataset(1, stuData);
		categoryPlot.setRenderer(1, barRenderer);
		// 颜色显示为黄色
		barRenderer.setSeriesPaint(0, Color.YELLOW);
		barRenderer.setShadowVisible(false);
		// barRenderer.setSeriesPaint(0, new Color(0, 0, 255));
		// 显示边框
		barRenderer.setDrawBarOutline(true);
		barRenderer.setBaseOutlinePaint(Color.GRAY);

		// 设置纵轴的最小值和最大值
		ValueAxis valueAxis = categoryPlot.getRangeAxis();
		valueAxis.setLowerBound(40);
		valueAxis.setUpperBound(110);

		JFreeChart chart = new JFreeChart(categoryPlot);
		// 设置title
		Font titleFont = new Font("黑体", Font.BOLD, 10); // 图片标题
		chart
				.setTitle(new TextTitle("高2011级6班在高一下期末的平均成绩与班级平均成绩的比较",
						titleFont));
		chart.setBackgroundPaint(Color.WHITE);

		return chart;

	}

	public static void main(String[] args) {

		Map<String, Number> avgScoreMap = new LinkedHashMap<String, Number>();

		avgScoreMap.put("总分", 0);
		avgScoreMap.put("语文", 97.02);
		avgScoreMap.put("数学", 73.71);
		avgScoreMap.put("英语", 77.9);
		avgScoreMap.put("理综", 0);
		avgScoreMap.put("物理", 52.73);
		avgScoreMap.put("化学", 66.98);

		Map<String, Number> stuScoreMap = new LinkedHashMap<String, Number>();

		stuScoreMap.put("总分", 0);
		stuScoreMap.put("语文", 98);
		stuScoreMap.put("数学", 70);
		stuScoreMap.put("英语", 50);
		stuScoreMap.put("理综", 0);
		stuScoreMap.put("物理", 50);
		stuScoreMap.put("化学", 70);

		JFreeChart chart = getChart(avgScoreMap, avgScoreMap);
		FileOutputStream fos_jpg = null;
		try {
			fos_jpg = new FileOutputStream("D:\\score.jpg");
			ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				fos_jpg.close();
			} catch (IOException e) {
			}
		}
	}

}

 

 还有就是图例如果显示在右面,可以这样设置

 

// 设置图例位置,字体
chart.getLegend().setPosition(RectangleEdge.RIGHT);
Font kfont = new Font("宋体", Font.PLAIN, 10);
chart.getLegend().setItemFont(kfont);

 

还没有解决的问题:

1.右侧刻度间距没有手动控制

2.柱状图中间的白色竖线去不掉,欢迎指点

 

补充:刻度手动控制解决,只要把上面99-102行的代码改为下面即可

 

// 数据轴精度
		NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
		numberAxis.setTickUnit(new NumberTickUnit(10));
		numberAxis.setLowerBound(0);
		numberAxis.setUpperBound(110);
 

 NumberAxis继承ValueAxis,所以ValueAxis有得属性方法, NumberAxis都可以使用。

 

 

 

 

分享到:
评论

相关推荐

    JfreeChart学习总结JfreeChart学习总结

    JfreeChart学习总结JfreeChart学习总结

    JFreeChart使用心得+列子

    **JFreeChart使用心得与实例解析** JFreeChart是一款强大的Java图表库,它允许开发者创建各种复杂的图表,如柱状图、饼图、线图、散点图等,广泛应用于数据分析、报告展示以及Web应用程序中。本文将分享JFreeChart...

    JFreeChart使用指南

    总结来说,JFreeChart 是一个强大且灵活的 Java 图表库,通过它可以轻松创建多种类型的图表,并对其进行细致的定制。结合实际项目需求,JFreeChart 可以为数据分析和可视化提供有力支持。如果你在使用过程中遇到问题...

    使用JFreeChart小结(一)

    在"使用JFreeChart小结(一)"这篇博文中,作者主要分享了入门JFreeChart的基本步骤和一些关键概念。 首先,让我们了解如何添加JFreeChart到项目中。通常,你可以通过Maven或Gradle构建工具将JFreeChart库作为依赖...

    JFreeChart使用教程(含下载、安装).doc

    ### JFreeChart使用教程:从下载到环境配置及柱状图绘制详解 #### 一、JFreeChart简介及其优势 JFreeChart是一款功能强大的Java绘图API,它提供了丰富的图表类型,如柱状图、饼图、曲线图、甘特图等,适用于Swing...

    jFreeChart学习总结

    ### JFreeChart学习总结 #### 一、为什么学习JFreeChart? 随着互联网技术的飞速发展,越来越多的应用程序转向了Web平台。这不仅包括传统的静态网页,也涵盖了那些需要复杂数据展示的应用,如报表系统。然而,从...

    使用JFreeChart来创建基于web的图表

    在本篇文章中,我们将深入探讨如何使用JFreeChart这一强大的Java图表库来创建基于Web的图表。通过细致地解析标题、描述以及部分已给出的内容,本文将为读者提供全面而深入的理解,帮助开发者掌握利用JFreeChart进行...

    jfreechart的一个小总结

    JFreeChart 是一个开源的 Java 图表库,它允许开发者创建各种复杂的图表,如柱状图、饼图、散点图、线形图等。在本文中,我们将深入探讨 JFreeChart 的核心类和它们在创建图表过程中的作用。 1. **JFreeChart 类**...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    这个压缩包“jfreechart-1.0.13”包含了JFreeChart的完整版本,让我们一起深入探讨其核心功能和使用方法。 JFreeChart是Java中最优秀的绘图工具之一,它支持多种图表类型,包括折线图、柱状图、饼图、散点图、甘特...

    JFreeChart饼图、柱状图等

    提供的"JFreeChart使用总结.doc"文档很可能是对JFreeChart使用的一份详尽总结,包含了如何创建不同类型的图表、自定义图表样式、以及如何将图表集成到项目中的实例和技巧。建议仔细阅读这份文档,结合实际项目进行...

    JfreeChart-雷达图与导出

    **JFreeChart库详解** JFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序或...同时,JFreeChart还支持图表的导出,方便在不同场景下使用。结合其他库,如Apache POI,可以实现更复杂的数据操作和集成。

    JFreeChart

    **"jfreechart 总结.txt" 和 "JFreeChart.txt"** 文件可能包含了JFreeChart的使用总结、技巧、注意事项或者其他开发者的经验分享,对于学习和使用JFreeChart来说是非常宝贵的参考资料。 总的来说,JFreeChart是一个...

Global site tag (gtag.js) - Google Analytics