现在我要使用网上的数据来生成柱形图的网页。
像部门包含四个人:黎明,李明,李彤,李丽。
  大类:IPV4, 
  小类:单播,多播,广播
点击部门的时候生成柱形网页,列出四个人的列表,点击其中一个人能看到这个人的IPV4全部数据,在点击IPV4柱形图
能够进入到那三个小类中。
 我想问一下这个东西如何来实现?

解决方案 »

  1.   

    用过根据数据生成柱形图的,但是LZ说的点击之后的功能没用过,
    JFreeChart生成饼图和柱形图看看这个吧,我当时用的就是这个!!
      

  2.   

    jfreechart  自己百度看看资料咯
     那个做统计报表很强大
      

  3.   

    可以使用Apache开源报表框架BIRT
      

  4.   

    能把柱形图的实现例子,建立dynamic web project之后的步骤。建立java 和建立jsp的位置。给我吗?
      

  5.   

    把相应数据取得后,分大类和小类,拼接数据直接调用JFreeChart的接口,就可以生成3维柱形图,可以满足你的需求
      

  6.   

    jfreechart 可以实现
    http://blog.csdn.net/ami121/category/394379.aspx
    用Js也可以实现 而且js有很多比较优秀的开源插件都可以实现
    http://8366.javaeye.com/blog/337674
    http://www.cssrain.cn/article.asp?id=1059
    http://paranimage.com/12-javascript-chart-plugins/
      

  7.   

    jfreechart 可以实现
    http://blog.csdn.net/ami121/category/394379.aspx用Js也可以实现 而且js有很多比较优秀的开源插件都可以实现
    http://8366.javaeye.com/blog/337674http://www.cssrain.cn/article.asp?id=1059http://paranimage.com/12-javascript-chart-plugins/
      

  8.   

    现在我遇到个问题,我都按照jfreechart的安装步骤都安装了,
    webxml添加<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>把jfreechart中的lib加到web--info--lib里头。然后填写个代码
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="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.*, 
    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"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title>
    </head>
    <body>
    <%   double[][] data = new double[][] {{172, 200, 103, 140, 126},{135, 521, 270, 340, 230},{332, 256, 323, 240, 426}};   
      String[] rowKeys = {"苹果","梨子","葡萄"}; 
      String[] columnKeys = {"北京","上海","广州","成都","深圳"};  
     CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);    
      JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计","KK","EE",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();   
    rangeAxis.setUpperMargin(0.00);  //设置最高的一个 Item 与图片顶端的距离     
     rangeAxis.setLowerMargin(0.5);   //设置最低的一个 Item 与图片底端的距离 
     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;   %></body>
    </html>但是,项目出现错误,
    Description Resource Path Location Type
    The method createBarChart3D(String, String, String, CategoryDataset, PlotOrientation, boolean, boolean, boolean) in the type ChartFactory is not applicable for the arguments (String, String, String, CategoryDataset, PlotOrientation, boolean, boolean, boolean) kkk.jsp DBServer/WebContent/WEB-INF line 27 JSP Problem
      

  9.   

    我的 jfreechart  给你源代码1:饼图: package test; import java.awt.Font; import javax.swing.JPanel; import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.data.general.DefaultPieDataset;
    import org.jfree.data.general.PieDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities; public class PieCharts  extends ApplicationFrame{
     public PieCharts(String s){
         super(s);
         setContentPane(createDemoPanel());
       }
     
     // 生成显示图表的面板
       public static JPanel createDemoPanel(){
         JFreeChart jfreechart = createChart(createDataset());
         return new ChartPanel(jfreechart);
       }
       
    // 生成饼图数据集对象
       public static PieDataset createDataset(){
         DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
         defaultpiedataset.setValue("管理人员",10.02D);
         defaultpiedataset.setValue("市场人员",20.23D);
         defaultpiedataset.setValue("开发人员",60.02D);
         defaultpiedataset.setValue("OEM人员",10.02D);
         defaultpiedataset.setValue("其他人员",5.11D);
         
         return defaultpiedataset;
       }
       
       //生成图表主对象JFreeChart
       public static JFreeChart createChart(PieDataset piedataset){
         //定义图表对象
         JFreeChart jfreechart = ChartFactory.createPieChart("CityInfoPort公司组织架构图",piedataset,true,true,false);
         //获得图表显示对象
         PiePlot pieplot = (PiePlot)jfreechart.getPlot();
         //设置图表标签字体
         pieplot.setLabelFont(new Font("SansSerif",Font.BOLD,12));
         pieplot.setNoDataMessage("No data available");
         pieplot.setCircular(true);
         pieplot.setLabelGap(0.01D);//间距
         
         return jfreechart;
       }
       
       public static void main(String[] args){
          PieCharts fjc = new PieCharts("CityInfoPort公司组织架构图");
          fjc.pack();
          RefineryUtilities.centerFrameOnScreen(fjc);
          fjc.setVisible(true);
        }   }
    2:折线图 package test; import javax.swing.JPanel; import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities; public class LineCharts extends ApplicationFrame {  public LineCharts(String s) {
      super(s);
      setContentPane(createDemoLine());
     }  public static void main(String[] args) {
      LineCharts fjc = new LineCharts("折线图");
      fjc.pack();
      RefineryUtilities.centerFrameOnScreen(fjc);
      fjc.setVisible(true);  }  // 生成显示图表的面板
     public static JPanel createDemoLine() {
      JFreeChart jfreechart = createChart(createDataset());
      return new ChartPanel(jfreechart);
     }  // 生成图表主对象JFreeChart
     public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
      //定义图表对象
      JFreeChart chart = ChartFactory.createLineChart("折线图", // chart title
        "时间", // domain axis label
        "销售额(百万)", // range axis label
        linedataset, // data
        PlotOrientation.VERTICAL, // orientation
        true, // include legend
        true, // tooltips
        false // urls
        );
      CategoryPlot plot = chart.getCategoryPlot();
      // customise the range axis...
      NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
      rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
      rangeAxis.setAutoRangeIncludesZero(true);
      rangeAxis.setUpperMargin(0.20);
      rangeAxis.setLabelAngle(Math.PI / 2.0);   return chart;
     }  //生成数据
     public static DefaultCategoryDataset createDataset() {
      DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
      //  各曲线名称
      String series1 = "冰箱";
      String series2 = "彩电";
      String series3 = "洗衣机";   //    横轴名称(列名称)
      String type1 = "1月";
      String type2 = "2月";
      String type3 = "3月";   linedataset.addValue(0.0, series1, type1);
      linedataset.addValue(4.2, series1, type2);
      linedataset.addValue(3.9, series1, type3);   linedataset.addValue(1.0, series2, type1);
      linedataset.addValue(5.2, series2, type2);
      linedataset.addValue(7.9, series2, type3);   linedataset.addValue(2.0, series3, type1);
      linedataset.addValue(9.2, series3, type2);
      linedataset.addValue(8.9, series3, type3);   return linedataset;
     } }
      3:柱状图: package test; import java.awt.Color; import javax.swing.JPanel; import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer3D;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities; public class BarCharts extends ApplicationFrame {  public BarCharts(String s) {
      super(s);
      setContentPane(createDemoBar());
     }  // 生成显示图表的面板
     public static JPanel createDemoBar() {
      JFreeChart jfreechart = createChart(createDataset());
      return new ChartPanel(jfreechart);
     }  // 生成图表主对象JFreeChart
     public static JFreeChart createChart(CategoryDataset dataset) {
      JFreeChart chart = ChartFactory.createBarChart3D("水果销量统计图", //建立3D柱状图
        "水果",//横轴名称
        "销量",//纵轴名称
        dataset,//数据集
        PlotOrientation.VERTICAL,//纵向显示
        true,//显示每个颜色柱子的柱名
        false, false);
      CategoryPlot plot = chart.getCategoryPlot();//设置图的高级属性
      BarRenderer3D renderer = new BarRenderer3D();//3D属性修改
      renderer.setBaseOutlinePaint(Color.BLACK);//设置边框颜色为black
      renderer.setWallPaint(Color.gray); //设置wall的颜色为gray
      renderer
        .setItemLabelGenerator(new StandardCategoryItemLabelGenerator());//设置柱顶数据,API中居然没有StandardCategoryItemLabelGenerator这个类
      //renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));//设置柱顶数据字体
      renderer.setItemLabelsVisible(true);//打开ItemLabel开关
      plot.setRenderer(renderer);//将修改后的属性值保存到图中
      plot.setForegroundAlpha(0.6f);//柱的透明度   return chart;
     }  // 生成数据
     public static CategoryDataset createDataset() {   double[][] data = new double[][] { { 672, 766, 223, 540, 126 },
        { 325, 521, 210, 340, 106 }, { 332, 256, 523, 240, 526 } };// 设置数据
      String[] rowKeys = { "苹果", "梨子", "葡萄" };// 行标志
      String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };// 列标志
      CategoryDataset linedataset = DatasetUtilities.createCategoryDataset(
        rowKeys, columnKeys, data); // 建立数据集   return linedataset;
     }  public static void main(String[] args) {
      BarCharts fjc = new BarCharts("柱状图");
      fjc.pack();
      RefineryUtilities.centerFrameOnScreen(fjc);
      fjc.setVisible(true);  } } 
      

  10.   

    粘贴上面的柱形例子,运行出现下面的结果.
    type :Status reportmessage: /test/WEB-INF/classes/test/PieCharts.javadescription: The requested resource (/test/WEB-INF/classes/test/PieCharts.java) is not available.
      

  11.   

    我是要在页面上显示的,是run on a server ,而不是run as java APPLICATION!
    我就是在test包下建立上面的柱形的代码。点击run on a server,就显示上面的错误。
    哪位知道是怎么回事,如何修改?
      

  12.   

    我博客里有JFreeChart的例子,可以去看看,birt的博客还没开始写
      

  13.   

    在jsp上编写几行代码就可以了
      

  14.   

    主要的一个问题是不知道怎么回事我的代码里头在工程中,出现
    Description Resource Path Location Type
    The method createPieChart(String, PieDataset, boolean, boolean, boolean) in the type ChartFactory is not applicable for the arguments (String, PieDataset, boolean, boolean, boolean) PieCharts.java DBServer/src/scylla/as/jfreechart line 44 Java Problem
    错误,但是我在builder path里头就选择了一个jfreechart.jar啊。
      

  15.   

    OK,现在我的工程已经建立起来了,
    <@ 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.DefaultCategoryDataset,
    org.jfree.chart.plot.CategoryPlot,
    org.jfree.chart.renderer.BarRenderer3D,
    java.awt.GradientPaint,
    java.awt.Color,
    java.awt.Font,
    org.jfree.chart.labels.StandardCategoryItemLabelGenerator,
    org.jfree.ui.TextAnchor,
    org.jfree.chart.labels.*"%>
    <%
    DefaultCategoryDataset dataset =new DefaultCategoryDataset();dataset.addValue(300, "广州", "苹果");
    dataset.addValue(200, "广州", "梨子");
    dataset.addValue(150, "广州", "葡萄");
    dataset.addValue(340, "广州", "芒果");
    dataset.addValue(-260, "广州", "荔枝");
    //step2:生成图表
    JFreeChart chart = ChartFactory.createBarChart3D
                       ("流量分析图", 
                          "类型",
                          "大小",
                         dataset, //数据集合
                         PlotOrientation.VERTICAL,
                          true,
                          true,
                         false);
    CategoryPlot categoryPlot = chart.getCategoryPlot();
    BarRenderer3D renderer=(BarRenderer3D)categoryPlot.getRenderer();
    //显示柱子上的数值
    renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    //设置柱子颜色字体
    renderer.setBaseItemLabelFont(new Font("黑体",Font.PLAIN,12)); 
    renderer.setBaseItemLabelsVisible(true);
     
    //设置柱子上数据的颜色   
    renderer.setItemLabelPaint(Color.BLUE);//设置柱子上比例数值的显示,如果按照默认方式显示,数值为方向正常显示   
    //设置柱子上显示的数据旋转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);   
    //生成图形
    String filename =ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
    String graphURL =request.getContextPath()+ "/servlet/DisplayChart?filename=" + filename;
    %>
     <P ALIGN="CENTER">
    <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0"> 
    </P>
    但是在
    //设置正常显示的柱子label的position   
    renderer.setPositiveItemLabelPosition(itemLabelPosition);   
    renderer.setNegativeItemLabelPosition(itemLabelPosition);   
       
    //设置不能正常显示的柱子label的position   
    renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);   
    renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
    里头出现了错误,能看看是如何修改的吗?