随笔-57  评论-170  文章-17  trackbacks-0
  2005年6月14日
      这个范例说明如何用JFreeChart画简单的柱状图,下面是一个JSP的简单范例:

<%@ page contentType="text/html; charset=GB2312" %>
<%@ page import="java.awt.*, java.text.*, java.util.*" %>
<%@ page import="org.jfree.chart.*" %>
<%@ page import="org.jfree.chart.axis.*" %>
<%@ page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator" %>
<%@ page import="org.jfree.chart.plot.*" %>
<%@ page import="org.jfree.chart.renderer.*" %>
<%@ page import="org.jfree.chart.servlet.ServletUtilities" %>
<%@ page import="org.jfree.data.DefaultCategoryDataset" %>
<%@ page import="org.jfree.ui.TextAnchor" %>

<%
  
//The data for the bar chart
  double[] data = {85156179.5211123};
  
//The labels for the bar chart
  String[] labels = {"Mon""Tue""Wed""Thu""Fri"};
  
  DefaultCategoryDataset dataset 
= new DefaultCategoryDataset();
  
for (int i = 0; i < data.length; i++{
    dataset.addValue(data[i], 
null, labels[i]);
  }

  
  JFreeChart chart 
= ChartFactory.createBarChart3D("Weekly Server Load""Work Week 25""MBytes", dataset, PlotOrientation.VERTICAL, falsefalsefalse);
  chart.setBackgroundPaint(
new Color(0xE1E1E1));
  
  CategoryPlot plot 
= chart.getCategoryPlot();
  
  
// 设置Y轴显示整数
  NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
  
  CategoryAxis domainAxis 
= plot.getDomainAxis();
  
//设置距离图片左端距离
  domainAxis.setLowerMargin(0.05);
  
  BarRenderer3D renderer 
= new BarRenderer3D();
  
//设置柱的颜色
  renderer.setSeriesPaint(0new Color(0xff00));
  plot.setRenderer(renderer);
  
  String filename 
= ServletUtilities.saveChartAsPNG(chart, 300280null, session);
  String graphURL 
= request.getContextPath() + "/displayChart?filename=" + filename;
%>
<html>
<body topmargin="5" leftmargin="5" rightmargin="0">
<div style="font-size:18pt; font-family:verdana; font-weight:bold">
    3D Bar Chart
</div>
<br>
<img src="<%= graphURL %>" border=0>
</body>
</html>


      画出来的图:

displayChart.JPG

      和ChartDirector画出来的图做一个比较:

threedbar.JPG

posted @ 2005-06-14 18:40 小米 阅读(3344) | 评论 (5)编辑 收藏
      以前一直是用JFreeChart画统计图的,不过JFreeChart画出来的图形不够精细,看起来有些模糊,今天在网上看到另外一个工具ChartDirector,这是一个商业版本的工具,不过也可以免费使用,只是在画出来的图形下面都有一条它的广告条。
      下面是它的一个柱状图的例子:

threedbar.JPG
      范例程序:

<%@page import="ChartDirector.*" %>
<%
//The data for the bar chart
double[] data = {85156179.5211123};

//The labels for the bar chart
String[] labels = {"Mon""Tue""Wed""Thu""Fri"};

//Create a XYChart object of size 300 x 280 pixels
XYChart c = new XYChart(300280);

//Set the plotarea at (45, 30) and of size 200 x 200 pixels
c.setPlotArea(4530200200);

//Add a title to the chart
c.addTitle("Weekly Server Load");

//Add a title to the y axis
c.yAxis().setTitle("MBytes");

//Add a title to the x axis
c.xAxis().setTitle("Work Week 25");

//Add a bar chart layer with green (0x00ff00) bars using the given data
c.addBarLayer(data, 0xff00).set3D();

//Set the labels on the x axis.
c.xAxis().setLabels(labels);

//output the chart
String chart1URL = c.makeSession(request, "chart1");

//include tool tip for the chart
String imageMap1 = c.getHTMLImageMap("""""title='{xLabel}: {value} MBytes'")
    ;
%>
<html>
<body topmargin="5" leftmargin="5" rightmargin="0">
<div style="font-size:18pt; font-family:verdana; font-weight:bold">
    3D Bar Chart
</div>
<hr color="#000080">
<a href="viewsource.jsp?file=<%=request.getServletPath()%>">
    
<font size="2" face="Verdana">View Chart Source Code</font>
</a>
</div>
<br>
<img src='<%=response.encodeURL("getchart.jsp?"+chart1URL)%>'
    usemap
="#map1" border="0">
<map name="map1"><%=imageMap1%></map>
</body>
</html>


      如果要在柱的顶部显示数值,可以调用Layer的setDataLabelFormat方法设置,范例:layer.setDataLabelFormat("{value}");

      其它的例子可以参考它的文档的说明。ChartDirector的网址:http://www.advsofteng.com

posted @ 2005-06-14 17:46 小米 阅读(1668) | 评论 (4)编辑 收藏