-
请教jfreechart的两个问题5
如下图:
1.我想把图例显示在图的左上角部分.
2.柱形图其实是由三部分组,支店总的改的,正常营收,额外营收(普通情况只有两部分,总的及实际的),这种柱形图怎么做,谢谢!!
3.另外要把图显示在jsp中,只有先生成图片,然后再显示吗?有没有更好的方法,能在jsp中传参数然后自动刷新显示.
谢谢!!!
问题补充:
谢谢walsh
另再请教一下,必须是struts2和jfreechart整合之后才能用这种简单的实现方法,因为项目不是很大,所以不想使用struts框架之类的,想用直接jsp开发,嘿~2009年8月19日 21:58
4个答案 按时间排序 按投票排序
-
采纳的答案
第一个问题:图例显示在左上角是做不到的。可以显示在上,下,左,右。
因为在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
-
如果用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
相关推荐
标题 "JFreeChart的两个包" 指的是在Java开发中使用JFreeChart库时所需的两个核心组件:`JFreeChart.jar` 和 `jcommon.jar`。JFreeChart 是一个开源的Java库,用于创建高质量的图表,包括饼图、柱状图、线图、散点图...
JFreeChart 是一个开源的 Java 图表库,它提供了丰富的图表类型,如柱状图、饼图、线图、散点图、面积图等,用于生成高质量的静态和动态图表。这个库广泛应用于数据分析、报告生成、Web 应用和桌面应用中。在初学者...
- **散点图(Scatter Plot)**:用于展示两个变量之间的关系,常用于统计学和科学研究。 - **面积图(Area Chart)**:与折线图相似,但填充了区域,强调数值的变化范围。 - **甘特图(Gantt Chart)**:用于项目...
然后,我们将这两个XYSeries对象添加到XYSeriesCollection对象中,作为图表的数据源。 接下来,我们可以使用ChartFactory的createPolarChart方法创建一个极坐标图。我们将XYSeriesCollection对象传递给这个方法,并...
解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将详细阐述如何解决JFreeChart中文乱码问题,并提供不同图表类型的具体配置示例。 1. **柱状图(CategoryPlot)**:...
jfreechart-1.5.2.jar,jfreechart|jfreechart
JFreeChart 是一个开源的 Java 图表库,它允许开发者创建各种复杂的图表,如柱状图、饼图、散点图、线形图等。在本文中,我们将深入探讨 JFreeChart 的核心类和它们在创建图表过程中的作用。 1. **JFreeChart 类**...
JFreeChart 是一个流行的 Java 库,用于创建各种类型的图表,包括饼图、折线图、柱状图等。在使用 JFreeChart 进行数据可视化时,可能会遇到乱码的问题,这通常与字体设置不当有关。本文将详细分析 Jfreechart 乱码...
- 散点图:通过点的位置表示两个变量之间的关系,常用于探索性数据分析。 - 甘特图:项目管理中的常见工具,用于展示任务的时间进度。 2. **自定义功能**: - JFreeChart允许开发者调整颜色、字体、边框、图例...
标签 "源码" 暗示 JFreeChart 是一个可以查看和修改源代码的项目,这对于开发者来说是一个重要的特性,因为它允许他们深入理解其内部工作原理,根据需求进行定制,或者修复可能存在的问题。"工具" 标签则表明 ...
JFreeChart 是一个强大的 Java 图表库,它能够生成高质量的图表,适用于多种应用场景,包括报告、应用程序、网页等。本篇文章将深入探讨 JFreeChart 的核心功能,并通过一个具体的 JSP 文件示例来展示其用法。 **一...
在学习过程中,博主的博客记录也是一个很好的资源,它可能包含了使用 JFreeChart 的心得、技巧以及遇到问题的解决方案。通过阅读这些记录,你可以进一步加深对 JFreeChart 的理解和应用。 总之,JFreeChart 是 Java...
JFreeChart 是一个强大的Java库,用于创建高质量的图表,包括线图、柱状图、饼图、散点图以及更多复杂图形。它广泛应用于数据分析、报告和可视化应用中。"JFreeChart 官方例子 JFreeChart Dome" 提供了一系列官方...
这个“最新Java做图表的jfreechart包”提供了两个必要的JAR文件,使开发者能够在Java应用程序中轻松地集成高质量的图表。 JFreeChart库的主要特点和功能包括: 1. **丰富的图表类型**:JFreeChart支持多种图表类型...
解决JFreeChart中的乱码问题通常需要以下几个步骤: 1. **设置编码**:确保你的源代码文件保存为正确的字符集,例如UTF-8。 2. **环境变量**:检查JVM启动参数,确保有正确的字符集设置,如`-Dfile.encoding=UTF-8...
首先,使用 JFreeChart 需要引入两个核心的 JAR 文件:`jcommon-版本号.jar` 和 `jfreechart-版本号.jar`。这两个库可以从 JFreeChart 的官方网站(http://sourceforge.net/projects/jfreechart/files)下载。值得...
标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...
将这两个`.jar`文件添加到项目的类路径(`classpath`)中,或者在所使用的Java集成开发环境(IDE)中作为外部库引入,即可在Java应用中利用JFreeChart进行图表开发。 #### 图表制作实例:BarChart 以BarChart为例...
- **定义**:一种用于显示两个数据系列之间差异的图表类型。 - **用途**:适用于突出显示两个数据系列之间的相对差异。 - **实现方法**:使用 JFreeChart 创建差异图,并进行适当的自定义设置。 **2.10 步进图** - ...