JFreeChart 生成柱状图

来源:互联网 发布:数据可视化原理 编辑:程序博客网 时间:2024/04/29 20:22

《转载》 【摘 要】本文介绍我们介绍使用 JFreeChart 生成柱状图,首先从一个最简单的例子开始,我只介绍了少量的方法,更多的请参考 JFreeChart 的 Java Doc API 文档和 Sample Code       我们介绍使用 JFreeChart 生成柱状图,首先从一个最简单的例子开始。   一 最简单的例子  为了降低门槛,让大家心理有个底,先介绍一个简单的不能再简单的例子,图片中的各类属性都采用默认值。 我在前人的基础上修改了一下;使用了jfreechart-1.0.9.jar进行编写的;
sample1页面: <%@ 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,                 java.io.PrintWriter,org.jfree.chart.ChartRenderingInfo,
org.jfree.chart.entity.StandardEntityCollection,
org.jfree.chart.urls.StandardPieURLGenerator,
org.jfree.chart.labels.StandardPieToolTipGenerator,
org.jfree.chart.ChartUtilities,java.io.File"%>
<%DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(300, "广州", "苹果");
dataset.addValue(200, "广州", "梨子");
dataset.addValue(500, "广州", "葡萄");
dataset.addValue(340, "广州", "芒果");
dataset.addValue(280, "广州", "荔枝");
JFreeChart chart = ChartFactory.createBarChart3D("水果销量统计图",  "水果",  "销量",               dataset,   PlotOrientation.VERTICAL,  false,     false,  false);
StandardEntityCollection entityCollection = new StandardEntityCollection();  //生成RenderingInfo实例  
ChartRenderingInfo info=new ChartRenderingInfo(entityCollection);  //将页面输出流out包装成一个PrintWriter的实例  PrintWriter pw=new PrintWriter(out);   String filenam=ServletUtilities.saveChartAsPNG(chart,800,800,info,null);  
//将图片的热点信息在 html页面中输出,pw代表页面的输出流,map0是定义热点的MAP标签ID  //info参数的热点信息  
ChartUtilities.writeImageMap(pw,"map0",info,false);%>
<img src="DisplayChart?filename=<%=filenam %>" width=800 height=800 border=0 usemap="#map0">

运行效果看:http://blog.tom.com/xfy168/article/255.html

sample2.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.awt.Color,   java.awt.Font,   org.jfree.chart.ChartFactory,                org.jfree.chart.JFreeChart,     org.jfree.chart.plot.PlotOrientation,                org.jfree.chart.servlet.ServletUtilities,      org.jfree.data.category.*,                org.jfree.chart.plot.CategoryPlot,   org.jfree.chart.axis.CategoryAxis,     org.jfree.chart.axis.ValueAxis,  org.jfree.chart.renderer.category.BarRenderer3D,                org.jfree.chart.labels.StandardCategoryItemLabelGenerator,                org.jfree.chart.axis.AxisLocation,      org.jfree.data.general.DatasetUtilities"%>
   <%   double[][] data = new double[][] {{672, 766, 223, 540, 126},{325, 521, 210, 340, 106},{332, 256, 523, 240, 526}};   
String[] rowKeys = {"苹果","梨子","葡萄"}; 
  String[] columnKeys = {"北京","上海","广州","成都","深圳"};  
 CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);    
  JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计",   null,  null,  dataset,   PlotOrientation.VERTICAL,   true,false,false);  
 chart.setBackgroundPaint(Color.WHITE);  
 CategoryPlot plot = chart.getCategoryPlot();   
   CategoryAxis domainAxis = plot.getDomainAxis();     ////domainAxis.setVerticalCategoryLabels(false);   
plot.setDomainAxis(domainAxis);     
 ValueAxis rangeAxis = plot.getRangeAxis();   //设置最高的一个 Item 与图片顶端的距离   
rangeAxis.setUpperMargin(0.15);   //设置最低的一个 Item 与图片底端的距离  
 rangeAxis.setLowerMargin(0.15);  
 plot.setRangeAxis(rangeAxis);     
 BarRenderer3D renderer = new BarRenderer3D();  
 renderer.setBaseOutlinePaint(Color.BLACK);   //设置 Wall 的颜色 
  renderer.setWallPaint(Color.gray);   //设置每种水果代表的柱的颜色   renderer.setSeriesPaint(0, new Color(0, 0, 255));   
renderer.setSeriesPaint(1, new Color(0, 100, 255));   
renderer.setSeriesPaint(2, Color.GREEN);   //设置每个地区所包含的平行柱的之间距离   
renderer.setItemMargin(0.1);   //显示每个柱的数值,并修改该数值的字体属性   
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());   
renderer.setItemLabelsVisible(true);  
 plot.setRenderer(renderer);      //设置柱的透明度  
 plot.setForegroundAlpha(0.6f);   //设置地区、销量的显示位置  
 plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);  
 plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);  
 String filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, null, session);  
 String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;   %>
<img src="<%= graphURL %>" width=600 height=400 border=0 usemap="#<%= filename %>">

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <!-- 配置JFreeChart项目的 DisplayChart-->
  <servlet>
  <servlet-name>DisplayChart</servlet-name>
  <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
  </servlet>
  <!-- 配置DisplayChart servlet映射的URL-->
   <servlet-mapping>
   <servlet-name>DisplayChart</servlet-name>
   <url-pattern>/DisplayChart</url-pattern>
   </servlet-mapping>
</web-app>