jfreechart学习
来源:互联网 发布:sybase数据库win7 编辑:程序博客网 时间:2024/05/21 19:38
这几天需要使用jfreechart,在网上找了很多的资料,但是感觉有点乱,所以自己就在这儿写一下对于jfreechart的学习心得。
***********需要说明一点,我的这个是web开发的,不是C/S模式下的***********
一,环境配置。
1,建立一个web工程。 以我的为例:jfreechart工程
2,将 jfreechart-1.0.13\lib 目录下的3个jar包(gnujaxp.jar,jcommon-1.0.16.jar,jfreechart-1.0.13.jar),复制到:jfreechart\WebRoot\WEB-INF\lib里面。(呵呵,这里也可以直接把所有的jar包全部复制到工程根目录下的lib之内)
3,配置web.xml。将以下内容复制到web.xml之内。
<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>
4,添加jsp文件。
在WebRoot目录之下,建立一个bar包,在bar包之下建立一个sample1.jsp
<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.DefaultCategoryDataset"%><%DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(610, "广州", "Hello");dataset.addValue(220, "广州", "牛肉");dataset.addValue(530, "广州", "鸡肉");dataset.addValue(340, "广州", "鱼肉");JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图","肉类","销量",dataset,PlotOrientation.VERTICAL,false,false,false);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;%><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
然后启动Tomcat,访问:http://localhost:8080/jfreechart/bar/sample1.jsp 就会得到图像了。
不足之处: 1,图片中的中文全部是乱码。解决方案可以参考: http://horizonhyg.iteye.com/blog/375689
[补充说明]:对于图片中的中文乱码,在今天的测试中,如果将其横坐标和纵坐标之标题和字体进行设置,则图片中的字体,就会由乱码变成需要显示的字体。
二,后来学习的。参考地址:http://www.iteye.com/topic/201899
下面的例子更加具有使用价值,能够在实际的项目中发挥作用。这个例子讲的很详细,但是有两点不足,第一:尽量不要在JSP中内嵌大量的Java代码。 第二:这个仅仅是一个3D的柱状图,其他的可以参考网上其他的资料。
<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.awt.Color, org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.CategoryDataset, org.jfree.data.general.*, org.jfree.chart.plot.CategoryPlot, org.jfree.chart.axis.CategoryAxis, org.jfree.chart.axis.ValueAxis, org.jfree.chart.renderer.category.BarRenderer3D, org.jfree.chart.urls.StandardCategoryURLGenerator, org.jfree.chart.*, org.jfree.chart.entity.*, org.jfree.chart.labels.*, org.jfree.chart.axis.CategoryLabelPositions, java.awt.Font, java.awt.GradientPaint, org.jfree.ui.TextAnchor, org.jfree.chart.axis.NumberAxis, org.jfree.chart.axis.NumberTickUnit "%><%java.io.PrintWriter pw=new java.io.PrintWriter(out);double[][] data = new double[][] {{500}, {200}, {100}, {400}, {600}, {300}};String[] rowKeys = {"苹果", "梨子", "葡萄", "桔子", "西瓜", "香蕉"};String[] columnKeys = {""};CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);//createCategoryDataset(Comparable[] arg0, Comparable[] arg1, double[][] arg2)/** 上面就是一个***DataSet,即数据集,将数据显示出来**/JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计", "水果", //横坐标名称 "销量", //纵坐标名称 dataset,//数据集合 PlotOrientation.VERTICAL,//图形位置,水平还是垂直 true, false, false); chart.setBackgroundPaint(Color.WHITE); //设定背景色为白色 //设置图片顶端的标题! chart.setTitle("ABCD"); CategoryPlot categoryPlot = chart.getCategoryPlot(); //获得 plot:3dBar为CategoryPlot categoryPlot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色 categoryPlot.setDomainGridlinePaint(Color.white); //横坐标网格线白色; 垂直的那根线 ******* categoryPlot.setDomainGridlinesVisible(true); //设置网格线可见 categoryPlot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色; 水平的那些线! ****** //获取横坐标 CategoryAxis domainAxis = categoryPlot.getDomainAxis(); //设置 横坐标 垂直显示 //domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.4)); //获取纵坐标 NumberAxis numberaxis = (NumberAxis)categoryPlot.getRangeAxis(); //将纵坐标间距设置为50 numberaxis.setTickUnit(new NumberTickUnit(50)); //设置纵坐标的标题字体和大小,在此处是:宋体 13号 numberaxis.setLabelFont(new Font("宋体",Font.PLAIN,13)); //设置横坐标的标题字体和大小,此处是“宋体13号” domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,13)); //设置距离图片左端距离,参数为图片的百分比 domainAxis.setLowerMargin(0.05); //设置距离图片右端距离 domainAxis.setUpperMargin(0.05); //设置横坐标的坐标值的字体 domainAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,12)); //使横坐标设置生效 categoryPlot.setDomainAxis(domainAxis); ValueAxis rangeAxis = categoryPlot.getRangeAxis(); //设置最高的一个柱与图片顶端的距离 rangeAxis.setUpperMargin(0.05); //设置最低的一个柱与图片底端的距离 rangeAxis.setLowerMargin(0.05); //使该功能生效 categoryPlot.setRangeAxis(rangeAxis); //设置竖坐标标签的旋转角度 rangeAxis.setLabelAngle(0.05); //重要的类,负责生成各种效果 Renderer的英文的意思就是:渲染,所以BarRenderer3D从这个名称中就可以理解它的意思:3D柱状图的渲染 BarRenderer3D renderer=(BarRenderer3D) categoryPlot.getRenderer(); //设置 Wall 的颜色 renderer.setWallPaint(Color.pink); //设置每个柱的颜色 GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue, 0.0F, 0.0F, new Color(0, 0, 64)); //设定特定颜色 GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0)); renderer.setSeriesPaint(0, gradientpaint); renderer.setSeriesPaint(1, gradientpaint1); //设置柱的 Outline 颜色 renderer.setSeriesOutlinePaint(0, Color.BLACK); renderer.setSeriesOutlinePaint(1, Color.BLACK); //设置每个category所包含的平行柱的之间距离 renderer.setItemMargin(0.1); //显示每个柱的数值,并修改该数值的字体属性 renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); //以下设置,将按照指定格式,制定内容显示每个柱的数值。可以显示柱名称,所占百分比 //renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("0.0%"))); //设置柱子上数值的字体 renderer.setItemLabelFont(new Font("宋体",Font.PLAIN,13)); //设置柱子上的字体可见 renderer.setItemLabelsVisible(true); //设置柱子上数据的颜色 renderer.setItemLabelPaint(Color.RED); //设置bar的最小宽度,以保证能显示数值 renderer.setMinimumBarLength(0.05); //最大宽度 //renderer.setMaximumBarWidth(0.07); //设置柱子上比例数值的显示,如果按照默认方式显示,数值为方向正常显示 //设置柱子上显示的数据旋转90度,最后一个参数为旋转的角度值/3.14 ItemLabelPosition itemLabelPosition= new ItemLabelPosition(ItemLabelAnchor.INSIDE12,TextAnchor.CENTER_RIGHT,TextAnchor.CENTER_RIGHT,-1.57D); //下面的设置是为了解决,当柱子的比例过小,而导致表示该柱子比例的数值无法显示的问题 //设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面 ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,TextAnchor.HALF_ASCENT_LEFT,-1.57D); //设置正常显示的柱子label的position renderer.setPositiveItemLabelPosition(itemLabelPosition); renderer.setNegativeItemLabelPosition(itemLabelPosition); //设置不能正常显示的柱子label的position renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback); renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback); categoryPlot.setRenderer(renderer); //设置柱子的透明度 categoryPlot.setForegroundAlpha(0.8f); //为柱图设置“数据挖陷” //第一个参数是跳转的连接地址 renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator("detail.jsp", "fruit", "")); //使设置生效 renderer.setBaseItemLabelsVisible(true); //设置柱的透明度 categoryPlot.setForegroundAlpha(0.68f); //设置地区、销量的显示位置 //plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); //生成图形的名称 //可以改变ServletUtilities源代码,设置图形统一前缀名称和默认存放路径 //注意:图形的大小往往都是通过配置文件设置的,不可能所有图形一个大小 String filename = ServletUtilities.saveChartAsPNG(chart, 800, 600, info, session); //调用DisplayChart(配置在webxml中),生成图形 String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; //将MAP信息,写入图形 ChartUtilities.writeImageMap(pw, filename, info, true); pw.flush();%><table width="100%"> <tr> <td align="center"> <!-- 生成图形 --> <img src="<%= graphURL %>" width=800 height=600 border=0 usemap="#<%= filename %>" alt=""> </td> </tr></table>
- 学习jfreechart
- JFreeChart学习
- Jfreechart学习
- JFreeChart 学习
- jfreeChart学习
- jfreechart学习
- Jfreechart学习
- JFreechart学习
- jFreeChart学习2---JFreeChart API中文文档
- Jfreechart 学习笔记
- JFreeChart学习笔记
- JFreeChart学习录
- JfreeChart学习总结
- Jfreechart 学习资料 (一)
- JfreeChart学习总结
- JfreeChart学习总结
- JfreeChart学习总结
- JfreeChart学习总结
- 电脑常识
- 二进制注册表数据应该怎样读取?
- web中翻页功能的实现
- MyEclipse中几个小的技巧
- Oracle中的几个问题记录
- jfreechart学习
- 传智播客学习日记]ADO.Net连接与增删改查
- jfreechart学习心得
- 与数据库连接的封装
- 数据库的一些操作方法
- struts 入门时的错误
- hibernate入门配置的错误
- 完整的Struts2讲义
- 错误记录与分析