使用jfreechart-1.0.13在jsp页面画3D柱状图表

 jsp页面:

 

<%

  String titleString="苹果(吨)销售分布统计图表";

  session.setAttribute("titleString",titleString);

  //String[] datastr = new String[] {  "672", "766", "223", "540", "100" } ;//对应y轴数据

  double[][] data = new double[][] {{ 672, 766, 250, 540, 100 }} ;//对应y轴数据

  String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };//x轴系列

  session.setAttribute("data",data);

  //session.setAttribute("datastr",datastr);

  session.setAttribute("columnKeys",columnKeys);

   %>

      <img src="CreateImg" border="0"/>

 

 

web.xml中增加servelet配置:

 

 <servlet>

    <servlet-name>CreateImg</servlet-name>

    <servlet-class>com.tools.chart.CreateImg</servlet-class>

  </servlet>  

  <servlet-mapping>

    <servlet-name>CreateImg</servlet-name>

    <url-pattern>/CreateImg</url-pattern>

  </servlet-mapping>

后台java文件:

 

package com.tools.chart;

/**

 * 可以使用export JAVA_OPTS="-Djava.awt.headless=true",

 *在catalina.sh中增加CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"

 *在启动Weblogic中要加上这个参数-Djava.awt.headless=true,这样才能显示出图片。

 *在JDK1.4可以在代码中增加:System.setProperty("java.awt.headless", "true");

 */

import java.io.*;

 

import javax.servlet.http.*;

import javax.servlet.*;

import java.awt.*;

 

import java.awt.Color;   

import java.awt.Font;   

 

import java.text.*;   

 

import org.jfree.chart.*;   

//import org.jfree.data.*;  

import org.jfree.chart.axis.*;

import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;

import org.jfree.chart.plot.*;

import org.jfree.data.category.*;

import org.jfree.chart.renderer.category.*;

import org.jfree.chart.title.*;

import org.jfree.data.general.DatasetUtilities;

@SuppressWarnings("serial")

public class CreateImg extends HttpServlet {   

public void init(ServletConfig conf) throws ServletException

     {

             super.init(conf);

     }

public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException

        {

         System.setProperty("java.awt.headless", "true");//好像针对java1.4

                res.setContentType("image/jpeg");

                res.setHeader("Pragma","No-cache");

                res.setHeader("Cache-Control","no-cache");

                res.setDateHeader("Expires", 0);               

               // double[][] data = new double[][] { { 672, 766, 223, 540, 126 } };  

                double data[][]=(double[][])req.getSession().getAttribute("data");

        String[] rowKeys = { "苹果" };   

        //String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" }; 

        String columnKeys[]=(String[])req.getSession().getAttribute("columnKeys");

       //String datastr[]=(String[])req.getSession().getAttribute("datastr");

        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

       // DefaultCategoryDataset dataset = new DefaultCategoryDataset();

            // for(int i=0;i<columnKeys.length;i++)            

            // dataset.addValue(Double.parseDouble(datastr[i]),rowKeys[0],columnKeys[i]);

       String titleString= (String)req.getSession().getAttribute("titleString");

                JFreeChart chart = ChartFactory.createBarChart3D(titleString, // 图表标题   

            "地点", // 目录轴的显示标签   

            "数据", // 数值轴的显示标签   

            dataset, // 数据集   

            PlotOrientation.VERTICAL, // 图表柱子方向:水平、垂直VERTICAL   

            true, // 是否显示图例(对于简单的柱状图必须是false)   

            true, // 是否生成提示tooltip   

            false // 是否生成URL链接   

            );   

          Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 14); 

          TextTitle stt=new TextTitle("---初步分析");

          stt.setFont(new Font("隶书", Font.ITALIC, 14));

          chart.addSubtitle(stt);          

          chart.getTitle().setFont(new Font("隶书", Font.BOLD, 24));          

          /*  

           * VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,  

           * 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看  

           */            chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);             chart.setTextAntiAlias(false);   

          chart.setBackgroundPaint(Color.white);   

          // create plot   

          CategoryPlot plot = chart.getCategoryPlot();   

          // 设置横虚线可见   

          plot.setRangeGridlinesVisible(true);   

          // 虚线色彩   

          plot.setRangeGridlinePaint(Color.gray);             

          // 数据轴精度   

          NumberAxis vn = (NumberAxis) plot.getRangeAxis();   

          // vn.setAutoRangeIncludesZero(true);   

          DecimalFormat df = new DecimalFormat("#0.00");   

          vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式   

          // x轴设置   

          CategoryAxis domainAxis = plot.getDomainAxis();   

          domainAxis.setLabelFont(labelFont);// 轴标题   

          domainAxis.setTickLabelFont(labelFont);// 轴数值              

          // Lable(Math.PI/3.0)度倾斜   

           domainAxis.setCategoryLabelPositions(CategoryLabelPositions   

           .createUpRotationLabelPositions(Math.PI / 3.0));              

          domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示              

          // 设置距离图片左端距离   

          domainAxis.setLowerMargin(0.1);   

          // 设置距离图片右端距离   

          domainAxis.setUpperMargin(0.1);   

          // 设置 columnKey 是否间隔显示   

          // domainAxis.setSkipCategoryLabelsToFit(true);              

          plot.setDomainAxis(domainAxis);   

          // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)   

         // plot.setBackgroundPaint(new Color(255, 255, 204));              

          // y轴设置   

          ValueAxis rangeAxis = plot.getRangeAxis();  

         // rangeAxis.setVerticalTickLabels(false);//设置坐标数字横着写

          rangeAxis.setLabelFont(labelFont);   //设置坐标轴别名字体

          rangeAxis.setTickLabelFont(labelFont); //设置坐标数字字体  

          // 设置最高的一个 Item 与图片顶端的距离   

          rangeAxis.setUpperMargin(0.15);   

          // 设置最低的一个 Item 与图片底端的距离   

          rangeAxis.setLowerMargin(0.15);            

          plot.setRangeAxis(rangeAxis);              

          BarRenderer3D renderer = new BarRenderer3D();//柱子3维的必要条件   

          // 设置柱子宽度   

          renderer.setMaximumBarWidth(0.05);   

          // 设置柱子高度   

          renderer.setMinimumBarLength(0.2);   

          // 设置柱子边框颜色   

          renderer.setBaseOutlinePaint(Color.BLACK);   

          // 设置柱子边框可见   

          renderer.setDrawBarOutline(true);             

          //  设置柱的颜色   

          renderer.setSeriesPaint(0, new Color(153, 204, 255 ));   

          renderer.setSeriesPaint(1, new Color(51, 204, 204));   

          renderer.setSeriesPaint(2, new Color(204, 255, 255));              

          // 设置每个地区所包含的平行柱的之间距离   

          renderer.setItemMargin(0.0);              

          // 显示每个柱的数值,并修改该数值的字体属性   

          renderer.setIncludeBaseInRange(true);   

          renderer   

            .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());   

          renderer.setBaseItemLabelsVisible(true);            

          renderer.setBaseItemLabelFont(labelFont);//柱状图柱子的字体           

          renderer.setLegendTextFont(0, labelFont);//图例的字体

         // renderer.setItemLabelFont(labelFont);

          plot.setRenderer(renderer);   

          // 设置柱的透明度   

          plot.setForegroundAlpha(1.0f);   

          ChartUtilities.writeChartAsPNG(res.getOutputStream(), chart, 600, 500, true, 10);//简单图片内容比jpg体积更小       

         // ChartUtilities.writeChartAsJPEG(res.getOutputStream(), chart, 600, 500);  

        }

public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException

     {

             doGet(req,res);

     }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值