JFreeChart用法

//折线图

@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();
		   }
		   
	   }
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值