首页 > 代码库 > SSH框架通过JFreeChart实现柱状图
SSH框架通过JFreeChart实现柱状图
一.直接生成的图片输出到jsp页面
1.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!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=UTF-8"> <base href=http://www.mamicode.com/"">>2.action类
public String execute() throws Exception{ //添加数据 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(42000, "月份" , "1月"); dataset.addValue(40000 , "月份" , "2月"); dataset.addValue(34000 , "月份" , "3月"); dataset.addValue(18000 , "月份" , "4月"); dataset.addValue(26000 , "月份" , "5月"); dataset.addValue(42000 , "月份" , "6月"); dataset.addValue(40000 , "月份" , "7月"); dataset.addValue(34000 , "月份" , "8月"); dataset.addValue(18000 , "月份" , "9月"); dataset.addValue(26000 , "月份" , "10月"); dataset.addValue(45000 , "月份" , "11月"); dataset.addValue(38000 , "月份" , "12月"); //创建一个柱状图 JFreeChart chart = ChartFactory.createBarChart3D("年度人口统计图", "人口", "数量",dataset,PlotOrientation.VERTICAL, true, false, false); chart.setTitle(new TextTitle("年度人口统计图", new Font("黑体", Font.ITALIC,22))); LegendTitle legend = chart.getLegend(0); legend.setItemFont(new Font("宋体", Font.BOLD, 14)); CategoryPlot plot = (CategoryPlot) chart.getPlot(); CategoryAxis categoryAxis = plot.getDomainAxis(); categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22)); categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18)); NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis(); numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22)); HttpServletResponse response=ServletActionContext.getResponse(); response.setContentType("image/"); ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1, chart, 900, 600, null); response.getOutputStream().close(); return null; }3.struts.xml配置<action name="chart2" class="Char2tAction"> <result name="success">/Chart.jsp</result> </action>
4.效果图
二.生成图片保存到本地:
1.生成图片
public void createChart() { // TODO Auto-generated method stub DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1001, "1", "A"); dataset.addValue(800, "2", "A"); dataset.addValue(150, "3", "A"); dataset.addValue(150, "1", "B"); dataset.addValue(150, "2", "B"); dataset.addValue(250, "3", "B"); dataset.addValue(150, "1", "C"); dataset.addValue(33, "2", "C"); dataset.addValue(900, "3", "C"); // JFreeChart chart = ChartFactory.createBarChart3D( // "", // 图表标题 // "", // 目录轴的显示标签 // "产量", // 数值轴的显示标签 // dataset, // 数据集 // PlotOrientation.VERTICAL , // 图表方向:垂直 // true, // 是否显示图例(对于简单的柱状图必须是false) // false, // 是否生成工具 // false // 是否生成URL链接 // ); //JFreeChart chart = ChartFactory.createBarChart3D("","","产量",dataset,PlotOrientation.VERTICAL,true,false,false); JFreeChart chart = ChartFactory.createBarChart3D("销量统计图", "种类", "产量", dataset, PlotOrientation.VERTICAL, true, false, false); //重新设置图标标题,改变字体 chart.setTitle(new TextTitle("销量统计图", new Font("黑体", Font.ITALIC , 22))); //取得统计图标的第一个图例 LegendTitle legend = chart.getLegend(0); //修改图例的字体 legend.setItemFont(new Font("宋体", Font.BOLD, 14)); //legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14)); CategoryPlot plot = (CategoryPlot)chart.getPlot(); chart.setBackgroundPaint(ChartColor.WHITE); //设置柱状图到图片上端的距离 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setUpperMargin(0.5); //取得横轴 CategoryAxis categoryAxis = plot.getDomainAxis(); //设置横轴显示标签的字体 categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); //分类标签以45度角倾斜 // categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18)); //取得纵轴 NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis(); //设置纵轴显示标签的字体 numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); //在柱体的上面显示数据 BarRenderer custombarrenderer3d = new BarRenderer(); custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色 custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); custombarrenderer3d.setBaseItemLabelsVisible(true); plot.setRenderer(custombarrenderer3d); //HttpServletRequest request = null; //request.getSession().getServletContext().getRealPath("/"); //URL a = Thread.currentThread().getContextClassLoader().getResource(""); //URL a = Thread.currentThread().getContextClassLoader().getResource(""); //System.out.println(a); FileOutputStream fos = null; //String imagePath = "D:\\chart.jpg"; String imagePath = "D:\\temp\\chart.jpg"; ChartRenderingInfo info = new ChartRenderingInfo(); try { fos = new FileOutputStream(imagePath); //将统计图标输出成JPG文件 ChartUtilities.writeChartAsJPEG( fos, //输出到哪个输出流 1, //JPEG图片的质量,0~1之间 chart, //统计图标对象 800, //宽 600,//高 info //ChartRenderingInfo 信息 ); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.显示到jsp:try{ String impath = "D:\\temp\\chart.jpg";//此处的图路径,是上面所示代码中生成柱状图的存储路径 File file = new File(impath); InputStream inputStream = null; if(file.exists()){ try { inputStream = new FileInputStream(file); } catch (FileNotFoundException e) { } } int i = inputStream.available(); byte data[] = new byte[i]; inputStream.read(data); HttpServletResponse response = ServletActionContext.getResponse(); ServletOutputStream out = response.getOutputStream(); response.setContentType("image/jpeg"); out.write(data); out.flush(); out.close(); }catch(IOException e){ e.printStackTrace(); }
SSH框架通过JFreeChart实现柱状图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。