JFreeChart用法

来源:互联网 发布:四川广电电视网络套餐 编辑:程序博客网 时间:2024/04/30 08:19
//折线图@RequestMapping(value = "/rankTable") public void rankTable(HttpServletRequest request,HttpServletResponse response,String taskName){  PrintWriter out =null;  List<Map<String, Object>> ranks = siteUrlService.getAllRank();  // 使用普通数据集  try {   out =response.getWriter();    //获取数据对象   DefaultCategoryDataset cd = new DefaultCategoryDataset();   for(int i=0;i<ranks.size();i++){    Map<String, Object> rk = ranks.get(i);    //System.out.println(rk.get("create_date")+" \t"+rk.get("rank"));    cd.addValue(Integer.valueOf(rk.get("rank").toString()), "排名榜", rk.get("create_date").toString());   }     //创建图形对象     JFreeChart jfc = ChartFactory.createLineChart(taskName, null, "排行量", cd, PlotOrientation.VERTICAL, true, false, false);     //设置图例的字体显示,防止中文乱码     jfc.getLegend().setItemFont(new Font("黑体", 0, 10));     //设置标题并且设置其字体,防止中文乱码     TextTitle textTitle = new TextTitle(taskName);     textTitle.setFont(new Font("宋体", Font.BOLD, 12));     jfc.setTitle(textTitle);     //设置图表子标题     jfc.addSubtitle(new TextTitle(" 按天份"));     //创建一个标题对象,用于放置产生图形日前     TextTitle tt = new TextTitle("日期:"+DateUtil.Sysdate()+"           ");     //设置该标题的字体,防止中文乱码     tt.setFont(new Font("黑体", 0, 10));     //设置该标题的位置为产生的图形下面     tt.setPosition(RectangleEdge.BOTTOM);     //设置图片为右对齐     tt.setHorizontalAlignment(HorizontalAlignment.RIGHT);     //将该标题添加到图表     jfc.addSubtitle(tt);     //设置整个图表的背景色为绿色     jfc.setBackgroundPaint(Color.green);     //获取图表区域对象     CategoryPlot cp = jfc.getCategoryPlot();     //设置图表区域背景色     cp.setBackgroundPaint(Color.white);     //设置边线不可见     cp.setRangeGridlinesVisible(false);           //设置横轴的字体,防止中文乱码           cp.getDomainAxis().setTickLabelFont(new Font("黑体", 0, 10));           //设置竖轴的字体,防止中文乱码           cp.getRangeAxis().setLabelFont(new Font("黑体", 0, 10));     //获取显示线条的对象     LineAndShapeRenderer lasp = (LineAndShapeRenderer)cp.getRenderer();     //设置拐点是否可见/是否显示拐点     lasp.setBaseShapesVisible(true);     //设置拐点不同用不同的形状     lasp.setDrawOutlines(true);     //设置线条是否被显示填充颜色     lasp.setUseFillPaint(true);     //设置拐点颜色     lasp.setBaseFillPaint(Color.yellow);     // 设置折线加粗     lasp.setSeriesStroke(0, new BasicStroke(3F));     lasp.setSeriesOutlineStroke(0, new BasicStroke(2.0F));     // 设置折线拐点     lasp.setSeriesShape(0,new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));          // 将图表已数据流的方式返回给客户端//     ChartUtilities.writeChartAsPNG(response.getOutputStream(), jfc,500, 270);     /* 生成文件 */     File file  =new File(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");     if(file.exists())      file.delete();     OutputStream os = new FileOutputStream(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");          ChartUtilities.writeChartAsJPEG(os, jfc, 1024, 300);              os.flush();             os.close();             out.write("true");  }   catch (Exception e) {   out.write("false");  }  finally{      if(out!=null){       out.close();      }   } }

//柱形图

@RequestMapping(value = "/rankTable")public void rankTable(String taskName,Integer taskId,HttpServletRequest request,HttpServletResponse response){PrintWriter out =null;List<Map<String, Object>> ranks = siteUrlService.getAllRank(taskId);// 使用普通数据集try {out =response.getWriter();DefaultCategoryDataset chartDate = new DefaultCategoryDataset();for(int i=0;i<ranks.size();i++){Map<String, Object> rk = ranks.get(i);//System.out.println(rk.get("create_date")+" \t"+rk.get("rank"));chartDate.setValue(Integer.valueOf(rk.get("rank").toString()), "排名榜", rk.get("create_date").toString());}DefaultCategoryDataset data = chartDate;JFreeChart chart = ChartFactory.createBarChart3D("任务排行榜", // 图表标题"月份", // 目录轴的显示标签taskName, // 数值轴的显示标签data, // 数据集PlotOrientation.VERTICAL, // 图表方向,此处为垂直方向true, // 是否显示图例true, // 是否生成工具false // 是否生成URL链接);Font kfont = new Font("宋体", Font.PLAIN, 12);    // 底部Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题// 图片标题chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));// 底部chart.getLegend().setItemFont(kfont);//** 得到坐标设置字体解决乱码CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();/* 设置 X轴坐标上的文字   X轴的标题文字 */CategoryAxis domainAxis = categoryplot.getDomainAxis();domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 11));   domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   /* 设置 Y轴坐标上的文字  Y轴的标题文字 */ValueAxis rangeAxis  = categoryplot.getRangeAxis(); rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));   rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); /* 设置柱状图上面显示真实数据 */BarRenderer3D renderer = (BarRenderer3D) categoryplot.getRenderer();ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER,TextAnchor.TOP_CENTER, 0D);renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));renderer.setItemLabelsVisible(true);categoryplot.setRenderer(renderer);/* 生成文件 */OutputStream os = new FileOutputStream(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");        ChartUtilities.writeChartAsJPEG(os, chart, 450, 230);             System.out.println(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");                os.close();        out.write("true");} catch (Exception e) {//e.printStackTrace();out.write("false");}   finally{   if(out!=null){   out.close();   }      }}


原创粉丝点击