我现在需要用jfreechart做一些东西
横轴不是时间,也不是数字
怎么弄?
最好发给我一个例子
最好折线图,柱状图和饼图一样一个
谢谢受到以后给分
请写上你的ID,我好给分
或者加我qq376389006
msn [email protected]
给我也可以
谢谢

解决方案 »

  1.   

    最好做成接口式的
    即只需要我输入固定格式数据就成
    比如
    String filename=chart.getXYChart(list);
      

  2.   

    路过打广告.楼主别删。谢谢。(新建的.net交流群59714431.欢迎喜欢交流的朋友加入)
      

  3.   

    你最好研究它的配套demo
    给你个好东西--是个源码。
      

  4.   

    给你贴到这里一个吧package com.myJFreeChart.util;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.GradientPaint;
    import java.awt.RenderingHints;
    import java.io.PrintWriter;import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartRenderingInfo;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.CategoryLabelPositions;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.entity.StandardEntityCollection;
    import org.jfree.chart.labels.CategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer;
    import org.jfree.chart.renderer.category.CategoryItemRenderer;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;public class CategoryItemChart {
     public static String generateBarChart(
             HttpSession session,
             PrintWriter pw,
             int w, int h) {
     String filename = null;
     try {
     CategoryDataset dataset=createDataset();
     JFreeChart chart=ChartFactory.createBarChart(
     "世界傻瓜大奖赛",//图表标题
     "比赛场次",//X轴标题
     "傻瓜程度",//Y轴标题
     dataset,//数据集合
     PlotOrientation.VERTICAL,//图表显示方向(水平、垂直)
     true,//是否使用图例
     false,//是否使用工具提示
     false//是否为图表增加URL
     );
     /*------------配置图表属性--------------*/
     // 1,设置整个图表背景颜色
     chart.setBackgroundPaint(Color.yellow);
     /*------------设定Plot参数-------------*/
     CategoryPlot plot=chart.getCategoryPlot();
     // 2,设置详细图表的显示细节部分的背景颜色
     plot.setBackgroundPaint(Color.PINK);
     // 3,设置垂直网格线颜色
     plot.setDomainGridlinePaint(Color.black);
     //4,设置是否显示垂直网格线
     plot.setDomainGridlinesVisible(true);
     //5,设置水平网格线颜色
     plot.setRangeGridlinePaint(Color.yellow);
     //6,设置是否显示水平网格线
     plot.setRangeGridlinesVisible(true);
     /*---------将所有数据转换为整数形式---------*/
     final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
     rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
     /*---------设置是否在柱图的状态条上显示边框----*/
     CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
     BarRenderer  render=(BarRenderer) plot.getRenderer();
     render.setItemMargin(0.1);
     /*---------设置状态条颜色的深浅渐变-----------*/
        GradientPaint gp0 = new GradientPaint(
    0.0f, 0.0f, new Color(255,200,80),
    0.0f, 0.0f, new Color(255,255,40)
    );
    GradientPaint gp1 = new GradientPaint(
    0.0f, 0.0f, new Color(50,255,50),
    0.0f, 0.0f, new Color(100,255,100)
    );
    GradientPaint gp2 = new GradientPaint(
    0.0f, 0.0f, Color.red,
    0.0f, 0.0f, new Color(255,100,100)
    );
        GradientPaint gp3 = new GradientPaint(
    0.0f, 0.0f, new Color(108,108,255),
    0.0f, 0.0f, new Color(150, 150, 200)
    );          
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        renderer.setSeriesPaint(2, gp2);
        renderer.setSeriesPaint(3, gp3);
        /*
         * 解决柱状体与图片边框的间距问题
         * */                 
        /*------设置X轴标题的倾斜程度----*/
        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
        );
        /*------设置柱状体与图片边框的左右间距--*/
        domainAxis.setLowerMargin(0.01);
        domainAxis.setUpperMargin(0.01);    /*------设置柱状体与图片边框的上下间距---*/
        ValueAxis rAxis = plot.getRangeAxis();
        rAxis.setUpperMargin(0.15);
        rAxis.setLowerMargin(0.15);
        
        /*---------设置每一组柱状体之间的间隔---------*/
        render.setItemMargin(0.0); 
        /*
         * 解决柱状体与图片边框的间距问题
         * 解决JFREECHART的中文显示问题
         * */  
        /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
        chart.getRenderingHints().put(
                RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
                );
        /*----------设置标题字体--------------------------*/
        TextTitle textTitle = chart.getTitle();
        textTitle.setFont(new Font("黑体", Font.PLAIN, 20));        
        /*------设置X轴坐标上的文字-----------*/
        domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11));
        /*------设置X轴的标题文字------------*/
        domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,12));         
        /*------设置Y轴坐标上的文字-----------*/
        rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12));
        /*------设置Y轴的标题文字------------*/
        rAxis.setLabelFont(new Font("黑体",Font.PLAIN,12));  
        /*---------设置柱状体上的显示的字体---------*/         
        renderer.setItemLabelGenerator(new LabelGenerator(0.0));
        renderer.setItemLabelFont(new Font("宋体",Font.PLAIN,12));
        renderer.setItemLabelsVisible(true); 
        /*
         * 解决JFREECHART的中文显示问题
         * */     
     /*------得到chart的保存路径----*/
        ChartRenderingInfo info = new ChartRenderingInfo(new
                StandardEntityCollection());
     filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
     /*------使用printWriter将文件写出----*/
     ChartUtilities.writeImageMap(pw, filename, info,true);
     pw.flush();
     }
     catch (Exception e) {
     System.out.println("Exception - " + e.toString());
     e.printStackTrace(System.out);
     filename = "public_error_500x300.png";
     }
     return filename;
     }
     /*-------------设置柱状体顶端的数据显示--------------*/
     static class LabelGenerator implements CategoryItemLabelGenerator {
     private double threshold;
     public LabelGenerator(double threshold) {
     this.threshold = threshold;
     }
     public String generateLabel(CategoryDataset dataset,
     int row,int column) {
     String result = null;
     final Number value = dataset.getValue(row, column);
     if (value != null) {
     final double v = value.doubleValue();
     if (v > this.threshold) {
     result = value.toString(); 
     }
     }
     return result;
     }
     public String generateRowLabel(CategoryDataset dataset,
     int row){
     return null;
     
     }
     public String generateColumnLabel(CategoryDataset dataset,
     int column){
     return null;
     }
     }
     /*-----------数据集合封装-------------*/
     private static CategoryDataset createDataset(){
     String s1="笨笨";
     String s2="蛋蛋";
     String s3="傻傻";
     String s4="瓜瓜";
     String c1="第一场";
     String c2="第二场";
     String c3="第三场";
     String c4="第四场";
     String c5="第五场";
     /*-------------封装图表使用的数据集-------------*/
     DefaultCategoryDataset dataset=new DefaultCategoryDataset();
     dataset.setValue(1.0,s1,c1);
     dataset.setValue(2.0,s1,c2);
     dataset.setValue(3.0,s1,c3);
     dataset.setValue(4.0,s1,c4);
     dataset.setValue(5.0,s1,c5);
     dataset.setValue(5.0,s2,c1);
     dataset.setValue(4.0,s2,c2);
     dataset.setValue(3.0,s2,c3);
     dataset.setValue(2.0,s2,c4);
     dataset.setValue(1.0,s2,c5);
     dataset.setValue(1.0,s3,c1);
     dataset.setValue(2.0,s3,c2);
     dataset.setValue(3.0,s3,c3);
     dataset.setValue(2.0,s3,c4);
     dataset.setValue(1.0,s3,c5);
     dataset.setValue(1.0,s4,c1);
     dataset.setValue(2.0,s4,c2);
     dataset.setValue(3.0,s4,c3);
     dataset.setValue(4.0,s4,c4);
     dataset.setValue(5.0,s4,c5);
     return dataset;
     }    
     }
    JSP文件:
    <%@ page contentType="text/html;charset=GBK"%>
    <%@ page import="com.myJFreeChart.util.CategoryItemChart"%>
    <%@ page import="java.io.PrintWriter"%>
    <html>
    <head>
    <title>
    </title>
    <%
    //以下部分为图象输出
    String fileName=CategoryItemChart.generateBarChart(session,new PrintWriter(out),580,250);
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
    %>
    </head>
    <body bgcolor="#ffffff">
    <table  width="580" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>
          <img src="<%= graphURL %>" width=580 height=250 border=0
             >
        </td>
      </tr>
    </table>
    </body>
    </html>
    WEB.XML文件中要配置生成图片的SERVLET:
    <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>/servlet/DisplayChart</url-pattern>
    </servlet-mapping>
      

  5.   

    就拿现成项目中的一个生成jfreechart的jsp页面来给你参考吧,代码没有整理过,大致看看吧,其中主要的是 ChartFactory.createLineChart,这里指定你要生成什么样子的图,饼、线、柱什么的就是在这里指定
    <%@ page contentType="text/html; charset=gb2312" language="java"%>
    <%@ page import="java.util.*,java.io.*,java.awt.*,com.sscrm.asp.beans.utils.*,java.text.SimpleDateFormat"%>
    <%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.renderer.category.*, org.jfree.data.category.*,org.jfree.chart.renderer.category.LineRenderer3D"%>
    <%@ page import="org.jfree.data.general.DefaultPieDataset"%>
    <%@ page import="org.jfree.chart.*"%>
    <%@ page import="org.jfree.chart.plot.*"%>
    <%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
    <%@ page import="org.jfree.chart.labels.StandardPieItemLabelGenerator"%>
    <%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
    <%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
    <%@ page import="java.util.List" %>
    <%
    String selfDateBegin = "";
    String selfDateEnd = "";
    String selfMonthBegin = "";
    String selfMonthEnd = "";
    String flag = "0";
    String typeid = "02";
    String picname ="";
    if(typeid.equals("01")){ 
        picname="单客户多产品月环比分析"+"  日期:"+selfDateBegin+"年"+selfMonthBegin+"月-"+selfDateEnd+"年"+selfMonthEnd+"月";
    }else if(typeid.equals("02")){
        picname="多客户单产品月环比分析"+"  日期:"+selfDateBegin+"年"+selfMonthBegin+"月-"+selfDateEnd+"年"+selfMonthEnd+"月";
    }
      
    HashMap customernameMap = new HashMap();
    HashMap productnameMap = new HashMap();
    HashMap loopReportMap = new HashMap();
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    int num = 0;
    try{
           if(typeid.equals("02")){
               productnameMap=customernameMap;
               }
    if(productnameMap!=null&&productnameMap.size()>0){
    for(int i=0;i<productnameMap.size();i++){
    String s1 = (String)productnameMap.get(""+i);
    String[] s2 = s1.split(",");
    String id = s2[0];
    String name = s2[1];
    int year = Integer.parseInt(selfDateBegin);
    int month = Integer.parseInt(selfMonthBegin);
    if(loopReportMap!=null&&loopReportMap.size()>0){
    Double[] Value = (Double[])loopReportMap.get(id);
    num = Value.length;
    double loopadd = 0.0;
    int j = 0;
    if(selfDateBegin.equals(selfDateEnd)){ //开始日期和结束日期为同一年
    //System.out.println("==================开始日期和结束日期为同一年======+++++=======  ");
       for(;month<=Integer.parseInt(selfMonthEnd);month++){
       if(j>0) {
          if(Value[j-1].doubleValue()==0.0){
          loopadd = 0.0;
          }else{
    loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
    }
    }   
        dataset.addValue(loopadd,name,year+"年"+month+"月");
       j++;
       }
       }else{
       //System.out.println("==================开始日期和结束日期不为同一年=============  ");
    //开始年日期标题
       for(;month<13;month++){
       if(j>0) {
       if(Value[j-1].doubleValue()==0.0){
          loopadd = 0.0;
          }else{
    loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
    }
    }   
        dataset.addValue(loopadd,name,year+"年"+month+"月");
       j++;
       }
       year = year + 1;
       //开始日期~结束日期中间年份标题
       if(year>Integer.parseInt(selfDateBegin)&&year<Integer.parseInt(selfDateEnd)){
       for(;year<Integer.parseInt(selfDateEnd);year++){
       for(int k=1;k<13;k++){
       if(j>0) {
       if(Value[j-1].doubleValue()==0.0){
          loopadd = 0.0;
          }else{
    loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
    }
    }   
        dataset.addValue(loopadd,name,year+"年"+k+"月");
        j++;
       }
       }
       }
       //结束年日期标题
       if(year==Integer.parseInt(selfDateEnd)){
       month = Integer.parseInt(selfMonthEnd);
       for(int k=1;k<=month;k++){
       if(j>0) {
       if(Value[j-1].doubleValue()==0.0){
          loopadd = 0.0;
          }else{
    loopadd = (Value[j].doubleValue()-Value[j-1].doubleValue())*100/Value[j-1].doubleValue();
    }
    }   
        dataset.addValue(loopadd,name,year+"年"+k+"月");
        j++;
       }
       }
    }
    }
    }
    }
    JFreeChart chart = ChartFactory.createLineChart(
    picname, // 图表标题
    "日期", // 目录轴的显示标签
    "增长率(%)", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
    response.setContentType("image/jpeg");
    response.flushBuffer();
    OutputStream out1 = response.getOutputStream();
    int chartW = 0;
    if(num*100+100>1200){
    chartW = 1200;
    }else if(num*100+100<600){
    chartW = 600;
    }else{
    chartW = num*100+100;
    }
    int chartH=340;
    ChartUtilities.writeChartAsJPEG(out1, chart, chartW, chartH);
    }catch(Exception e){
    e.printStackTrace();
    }
    %>