0 0

请教jfreechart的两个问题5

如下图:

1.我想把图例显示在图的左上角部分.
2.柱形图其实是由三部分组,支店总的改的,正常营收,额外营收(普通情况只有两部分,总的及实际的),这种柱形图怎么做,谢谢!!
3.另外要把图显示在jsp中,只有先生成图片,然后再显示吗?有没有更好的方法,能在jsp中传参数然后自动刷新显示.
谢谢!!!
问题补充:
谢谢walsh
另再请教一下,必须是struts2和jfreechart整合之后才能用这种简单的实现方法,因为项目不是很大,所以不想使用struts框架之类的,想用直接jsp开发,嘿~
2009年8月19日 21:58

4个答案 按时间排序 按投票排序

0 0

采纳的答案

第一个问题:图例显示在左上角是做不到的。可以显示在上,下,左,右。

因为在API中只能设置这几个位置,相信楼主这个问题应该来说不是最重要的吧。

第二个问题:

public JFreeChart createStackedBarChart() {
		double[][] data = new double[][] { { 10, 8, 12, 10, 40 },
				{ 18, 12, 20, 10, 60 } };
		String[] rowKeys = { "营收", "额外" };
		String[] columnKeys = { "分店A", "分店B", "分店C", "分店D", "总店" };
		CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);

		// 2:JFreeChart对象
		JFreeChart chart = ChartFactory.createStackedBarChart("营业图", // 图表标题
				"", // 目录轴的显示标签
				"", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		chart.setTextAntiAlias(false);
		chart.setBackgroundPaint(Color.WHITE);
		chart.setTitle(new TextTitle("营业图", new Font("隶书", Font.BOLD, 25)));
		Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
		// 2 .3 Plot 对象 Plot 对象是图形的绘制结构对象
		CategoryPlot plot = chart.getCategoryPlot();
		plot.setRangeGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.gray);
		NumberAxis vn = (NumberAxis) plot.getRangeAxis();
		vn.setUpperBound(200);
		DecimalFormat df = new DecimalFormat("000");
		vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
		// DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLabelFont(labelFont);// 轴标题
		domainAxis.setTickLabelFont(labelFont);// 轴数值
			domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);
		plot.setDomainAxis(domainAxis);
		// y轴设置
		ValueAxis rangeAxis = plot.getRangeAxis();
		rangeAxis.setLabelFont(labelFont);
		rangeAxis.setTickLabelFont(labelFont);
		// 设置最高的一个 Item 与图片顶端的距离
		rangeAxis.setUpperMargin(0.15);
		// 设置最低的一个 Item 与图片底端的距离
		rangeAxis.setLowerMargin(0.15);
		plot.setRangeAxis(rangeAxis);

		// Renderer 对象是图形的绘制单元
		StackedBarRenderer renderer = new StackedBarRenderer();
		// 设置柱子宽度
		renderer.setMaximumBarWidth(0.05);
		// 设置柱子高度
		renderer.setMinimumBarLength(0.1);
		// 设置柱的边框颜色
		renderer.setBaseOutlinePaint(Color.BLACK);
		// 设置柱的边框可见
		renderer.setDrawBarOutline(true);

		renderer.setSeriesPaint(0, new Color(204, 255, 204));
		renderer.setSeriesPaint(1, new Color(255, 204, 153));

		renderer.setItemMargin(0.4);

		renderer
				.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setBaseItemLabelsVisible(true);

		plot.setRenderer(renderer);
		return chart;
	}


运行结果如下图所示:
http://walsh.iteye.com/upload/attachment/138372/445c54ac-5c1c-3be3-b3d7-aacdac1aee3f.png

第三个问题:

当然有更好的办法了,上图实现的就是在JSP中显示的,并且可以自动刷新,从而显示最新的数据信息。用struts2和jfreechart可以很容易就实现了。不会生成任何中间图片文件。

2009年8月20日 19:24
0 0

如果用JSP,那就更简单了,只需要一个JSP文件就可实现(五秒钟自动刷新一次,你可以修改)。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.text.*"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.axis.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.chart.title.*"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page
	import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="org.jfree.chart.renderer.category.StackedBarRenderer"%>
<%@ page import="org.jfree.chart.title.TextTitle"%>
<%@ page import="org.jfree.data.category.CategoryDataset"%>
<%@ page import="org.jfree.data.general.DatasetUtilities"%>
<%@ page import="java.io.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>My JSP 'test.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="refresh" content="5">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
	</head>
	<body>
		<%
			double[][] data = new double[][] { { 20, 30, 25, 50, 125 },
					{ 30, 50, 45, 64, 190 } };
			String[] rowKeys = { "营收", "额外" };
			String[] columnKeys = { "分店A", "分店B", "分店C", "分店D", "总店" };
			CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
					rowKeys, columnKeys, data);
			JFreeChart chart = ChartFactory.createStackedBarChart("营业图", // 图表标题
					"", // 目录轴的显示标签
					"", // 数值轴的显示标签
					dataset, // 数据集
					PlotOrientation.VERTICAL, // 图表方向:水平、垂直
					true, // 是否显示图例(对于简单的柱状图必须是false)
					false, // 是否生成工具
					false // 是否生成URL链接
					);
			LegendTitle legend = chart.getLegend(0);
			legend.setItemFont(new Font("宋体", Font.BOLD, 14));
			chart.setTextAntiAlias(false);
			chart.setBackgroundPaint(Color.WHITE);
			chart.setTitle(new TextTitle("营业图", new Font("隶书", Font.BOLD, 25)));
			Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
			CategoryPlot plot = chart.getCategoryPlot();
			plot.setRangeGridlinesVisible(true);
			plot.setRangeGridlinePaint(Color.gray);
			NumberAxis vn = (NumberAxis) plot.getRangeAxis();
			vn.setUpperBound(500);
			DecimalFormat df = new DecimalFormat("000");
			vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
			CategoryAxis domainAxis = plot.getDomainAxis();
			domainAxis.setLabelFont(labelFont);// 轴标题
			domainAxis.setTickLabelFont(labelFont);// 轴数值
			domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示
			plot.setDomainAxis(domainAxis);
			ValueAxis rangeAxis = plot.getRangeAxis();
			rangeAxis.setLabelFont(labelFont);
			rangeAxis.setTickLabelFont(labelFont);
			rangeAxis.setUpperMargin(0.15);
			rangeAxis.setLowerMargin(0.15);
			plot.setRangeAxis(rangeAxis);
			StackedBarRenderer renderer = new StackedBarRenderer();
			renderer.setMaximumBarWidth(0.1);
			renderer.setMinimumBarLength(0.1);
			renderer.setBaseOutlinePaint(Color.BLACK);
			renderer.setDrawBarOutline(true);
			renderer.setSeriesPaint(0, new Color(255, 102, 102));
			renderer.setSeriesPaint(1, new Color(51, 153, 51));
			renderer.setItemMargin(0.4);
			renderer
					.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			renderer.setBaseItemLabelsVisible(true);
			plot.setRenderer(renderer);
			StandardEntityCollection sec = new StandardEntityCollection();
			ChartRenderingInfo info = new ChartRenderingInfo(sec);
			PrintWriter w = new PrintWriter(out);//输出MAP信息 
			//700是图片长度,500是图片高度
			String filename = ServletUtilities.saveChartAsJPEG(chart, 700, 500,
					info, session);
			ChartUtilities.writeImageMap(w, "map0", info, false);
			String graphURL = request.getContextPath()
					+ "/DisplayChart?filename=" + filename;
		%>
		<P ALIGN="CENTER">
			<img src="<%=graphURL%>" width=700 height=500 border=0 usemap="#map0">
		</P>
	</body>
</html>


web.xml配置文件如下:
<?xml version="1.0" encoding="GB18030"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>DisplayChart</servlet-name>
		<servlet-class>
			org.jfree.chart.servlet.DisplayChart
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DisplayChart</servlet-name>
		<url-pattern>/DisplayChart</url-pattern>
	</servlet-mapping>
</web-app>


不用做任何修改,启动服务器后,即可运行!

2009年8月21日 15:22
0 0

当然了,上面的可能看起来不太漂亮,但是你可以进一步美化的。

2009年8月20日 19:27
0 0

看它的收费文档

这里有下载
http://ari.iteye.com/blog/290094

2009年8月20日 08:23

相关推荐

    JFreeChart的两个包

    标题 "JFreeChart的两个包" 指的是在Java开发中使用JFreeChart库时所需的两个核心组件:`JFreeChart.jar` 和 `jcommon.jar`。JFreeChart 是一个开源的Java库,用于创建高质量的图表,包括饼图、柱状图、线图、散点图...

    jfreeChart几个简单例子

    JFreeChart 是一个开源的 Java 图表库,它提供了丰富的图表类型,如柱状图、饼图、线图、散点图、面积图等,用于生成高质量的静态和动态图表。这个库广泛应用于数据分析、报告生成、Web 应用和桌面应用中。在初学者...

    jfreechart几个示例

    - **散点图(Scatter Plot)**:用于展示两个变量之间的关系,常用于统计学和科学研究。 - **面积图(Area Chart)**:与折线图相似,但填充了区域,强调数值的变化范围。 - **甘特图(Gantt Chart)**:用于项目...

    jfreechart绘制的风速风向玫瑰图

    然后,我们将这两个XYSeries对象添加到XYSeriesCollection对象中,作为图表的数据源。 接下来,我们可以使用ChartFactory的createPolarChart方法创建一个极坐标图。我们将XYSeriesCollection对象传递给这个方法,并...

    jfreechart中文乱码问题解决方案

    解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将详细阐述如何解决JFreeChart中文乱码问题,并提供不同图表类型的具体配置示例。 1. **柱状图(CategoryPlot)**:...

    jfreechart-1.5.2.jar,jfreechart|jfreechart

    jfreechart-1.5.2.jar,jfreechart|jfreechart

    jfreechart的一个小总结

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

    Jfreechart

    JFreeChart 是一个流行的 Java 库,用于创建各种类型的图表,包括饼图、折线图、柱状图等。在使用 JFreeChart 进行数据可视化时,可能会遇到乱码的问题,这通常与字体设置不当有关。本文将详细分析 Jfreechart 乱码...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    - 散点图:通过点的位置表示两个变量之间的关系,常用于探索性数据分析。 - 甘特图:项目管理中的常见工具,用于展示任务的时间进度。 2. **自定义功能**: - JFreeChart允许开发者调整颜色、字体、边框、图例...

    jfreechart

    标签 "源码" 暗示 JFreeChart 是一个可以查看和修改源代码的项目,这对于开发者来说是一个重要的特性,因为它允许他们深入理解其内部工作原理,根据需求进行定制,或者修复可能存在的问题。"工具" 标签则表明 ...

    jfreechart几个例子

    JFreeChart 是一个强大的 Java 图表库,它能够生成高质量的图表,适用于多种应用场景,包括报告、应用程序、网页等。本篇文章将深入探讨 JFreeChart 的核心功能,并通过一个具体的 JSP 文件示例来展示其用法。 **一...

    jfreechart demo

    在学习过程中,博主的博客记录也是一个很好的资源,它可能包含了使用 JFreeChart 的心得、技巧以及遇到问题的解决方案。通过阅读这些记录,你可以进一步加深对 JFreeChart 的理解和应用。 总之,JFreeChart 是 Java...

    JFreeChart 官方例子 JFReeChart Dome

    JFreeChart 是一个强大的Java库,用于创建高质量的图表,包括线图、柱状图、饼图、散点图以及更多复杂图形。它广泛应用于数据分析、报告和可视化应用中。"JFreeChart 官方例子 JFreeChart Dome" 提供了一系列官方...

    最新Java做图表的jfreechart包

    这个“最新Java做图表的jfreechart包”提供了两个必要的JAR文件,使开发者能够在Java应用程序中轻松地集成高质量的图表。 JFreeChart库的主要特点和功能包括: 1. **丰富的图表类型**:JFreeChart支持多种图表类型...

    JFreeChart

    解决JFreeChart中的乱码问题通常需要以下几个步骤: 1. **设置编码**:确保你的源代码文件保存为正确的字符集,例如UTF-8。 2. **环境变量**:检查JVM启动参数,确保有正确的字符集设置,如`-Dfile.encoding=UTF-8...

    jFreeChart简单入门.doc

    首先,使用 JFreeChart 需要引入两个核心的 JAR 文件:`jcommon-版本号.jar` 和 `jfreechart-版本号.jar`。这两个库可以从 JFreeChart 的官方网站(http://sourceforge.net/projects/jfreechart/files)下载。值得...

    JFreechart 在linux下不显示及中文乱码问题

    标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...

    jfreechart1.0.6_pdf

    将这两个`.jar`文件添加到项目的类路径(`classpath`)中,或者在所使用的Java集成开发环境(IDE)中作为外部库引入,即可在Java应用中利用JFreeChart进行图表开发。 #### 图表制作实例:BarChart 以BarChart为例...

    jfreeChart pdf文档(原文)

    - **定义**:一种用于显示两个数据系列之间差异的图表类型。 - **用途**:适用于突出显示两个数据系列之间的相对差异。 - **实现方法**:使用 JFreeChart 创建差异图,并进行适当的自定义设置。 **2.10 步进图** - ...

Global site tag (gtag.js) - Google Analytics