JFreeChart生成图片

<!-- jfreechart begin -->  
<dependency>  
    <groupId>jfree</groupId>  
    <artifactId>jcommon</artifactId>  
    <version>1.0.23</version>  
</dependency>  
<dependency>  
    <groupId>jfree</groupId>  
    <artifactId>jfreechart</artifactId>  
    <version>1.0.19</version>  
</dependency>  
<!-- jfreechart end -->

import java.awt.Color;  
import java.awt.Font;  
import java.io.File;  
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
 
import javax.servlet.http.HttpServletRequest;
 
import org.jfree.chart.ChartFactory;  
import org.jfree.chart.ChartUtilities;  
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;  
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;  
import org.jfree.chart.plot.PlotOrientation;  
import org.jfree.chart.renderer.category.LineAndShapeRenderer;  
import org.jfree.chart.title.TextTitle;  
import org.jfree.data.category.CategoryDataset;  
import org.jfree.data.general.DatasetUtilities;  
      
    /**
     * 实际取色的时候一定要16位的,这样比较准确
     *  
     */  
    public class LineChart {  
      
        private String CHART_PATH = null;
        static{
            setChartTheme();
        }
      
        public static void setChartTheme() {
            //创建主题样式
            StandardChartTheme standardChartTheme=new StandardChartTheme("CN");
            //设置标题字体
            standardChartTheme.setExtraLargeFont(new Font("黑体",Font.BOLD,25));
            //设置图例的字体
            standardChartTheme.setRegularFont(new Font("宋书",Font.TRUETYPE_FONT,12));
            //设置轴向的字体
            standardChartTheme.setLargeFont(new Font("宋书",Font.TRUETYPE_FONT,12));
            //应用主题样式
            ChartFactory.setChartTheme(standardChartTheme);
        }
        /**
         * 生成折线图
         * @throws Exception
         */  
        public String makeLineAndShapeChart(List<HashMap<String,double[]>> list,HttpServletRequest request) throws Exception {
            CHART_PATH=request.getSession().getServletContext().getRealPath("fileDisk/report/monthSummary/img/");//图片输出路径
            int size = list.size();
            //线的名称 一维数组
            String[] rowKeys = new String[size];

     //二维数组存放折线图数据
            double[][] data = new double[size][12];
           //线的名称 与折线数据数组顺序对应
            String fileName="\\pic.png";

    //横坐标
            String[] columnKeys = {"一月", "二月", "三月", "四月", "五月","六月","七月", "八月", "九月", "十月", "十一月","十二月"};
            CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);
            
            File directory=null;
            File file=null;
            String chartName = (CHART_PATH + fileName);
            directory=new File(CHART_PATH);
            if (!directory.exists()) {  
                directory.mkdirs();  
            }
            file=new File(chartName);
            createTimeXYChar("机车故障地理位置分布", "月份", "故障处理数量", dataset, file);  
            return "/fileDisk/report/monthSummary/img"+fileName;
        }  
        // 折线图 数据集  
        public CategoryDataset getBarData(double[][] data, String[] rowKeys,  
                String[] columnKeys) {  
            return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);  
      
        }
      
        /**
         * 折线图
         *  
         * @param chartTitle:折线图标题
         * @param x :X轴名称
         * @param y :Y轴名称
         * @param xyDataset
         * @param charName
         * @return
         * @throws Exception
         */  
        public void createTimeXYChar(String chartTitle, String x, String y,CategoryDataset xyDataset, File file) throws Exception {  
            JFreeChart chart = ChartFactory.createLineChart(chartTitle, x, y, xyDataset, PlotOrientation.VERTICAL, true, true, false);  
      
            chart.setTextAntiAlias(false);  
            chart.setBackgroundPaint(Color.WHITE);  
            // 设置图标题的字体重新设置title  
            //Font font = new Font("隶书", Font.BOLD, 25);  
            TextTitle title = new TextTitle(chartTitle);  
            //title.setFont(font);  
            chart.setTitle(title);  
            // 设置面板字体  
            //Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);  
      
            chart.setBackgroundPaint(Color.WHITE);  
      
            CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();  
            // x轴 // 分类轴网格是否可见  
            categoryplot.setDomainGridlinesVisible(true);  
            // y轴 //数据轴网格是否可见  
            categoryplot.setRangeGridlinesVisible(true);  
      
            categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩  
      
            categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩  
      
            categoryplot.setBackgroundPaint(Color.lightGray);  
      
            // 设置轴和面板之间的距离  
            // categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));  
      
            CategoryAxis domainAxis = categoryplot.getDomainAxis();  
      
            //domainAxis.setLabelFont(labelFont);// 轴标题  
      
            //domainAxis.setTickLabelFont(labelFont);// 轴数值  
      
            //domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的  
            // Lable  
            // 45度倾斜  
            // 设置距离图片左端距离  
      
            domainAxis.setLowerMargin(0.0);  
            // 设置距离图片右端距离  
            domainAxis.setUpperMargin(0.0);  
      
            NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();  
            numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  
            numberaxis.setAutoRangeIncludesZero(true);  
      
            // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!  
            LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();  
      
            lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见  
      
            lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见  
      
            // 显示折点数据  
            lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());  
            lineandshaperenderer.setBaseItemLabelsVisible(true);
            
            FileOutputStream fos_jpg=null;  
            try {  
                fos_jpg = new FileOutputStream(file,false);  
                // 将报表保存为png文件  
                ChartUtilities.writeChartAsPNG(fos_jpg, chart, 700, 490);
                fos_jpg.close();
            } catch (Exception e) {
                e.printStackTrace();
                throw e;
            } finally {  
                try {
                    fos_jpg.close();
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }  
        }  
    }  
注意:X、Y坐标轴名称在中间,不能放在末尾处

时间: 2024-11-24 09:52:06

JFreeChart生成图片的相关文章

使用JfreeChart生成统计图

在项目中遇到按年度销量生成柱装图的要求,记录下来. 这里有很详细的例子 效果图: 依赖jar包:jcommon-1.0.23.jar    jfreechart-1.0.19.jar 工具类 1 package com.hangage.util; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.text.DecimalFormat; 6 import org.jfree.chart.ChartFactory; 7

设备资源管理系统-JFreeChart

设备资源管理系统-JFreeChart 操作: 1.以柱状图的形式统计人员情况 统计项:单位名称 单位下人员数量 查询数据库表(elec_systemddl.elec_user),返回结果. 2.PO对象转换成VO对象 3.使用JfreeChart生成图片,(注意:使用查询的结果生成数据集) 4.将filename放置到request对象中 暂时完结 设备资源管理系统-JFreeChart

linux下使用jfreechart

使用jfreechart生成图片,在windows下没问题,在linux下 Could not initialize class org.jfree.chart.JFreeChart 因为linux下默认不能初始化JFreeChart Headless模式是系统的一种配置模式.在该模式下,系统缺少了显示设备.键盘或鼠标.Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者.因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用

JFreeChart与AJAX+JSON+ECharts两种处理方式生成热词统计可视化图表

本篇的思想:对HDFS获取的数据进行两种不同的可视化图表处理方式.第一种JFreeChar可视化处理生成图片文件查看.第二种AJAX+JSON+ECharts实现可视化图表,并呈现于浏览器上.   对此,给出代码示例,通过网络爬虫技术,将上传到HDFS的新浪网新闻信息实现热词统计功能,通过图表的柱状图来显示出来. ------> 目录: 1.JFreeChart可视化处理(生成本地图片) [1]HDFS文件读取 [2]JDFreeChart库应用 2.AJAX+JSON+EChart生成可视化图

(转)Struts2+JFreeChart 环境搭建个基本用法!

正题      下面以边帖图片和代码的方式来讲解Struts2与JFreeChart的整合.      搭建环境:首先帖一张工程的目录结构以及所需的jar包.注意:如果你不打算自己写ChartResult的话只需要引入struts2-jfreechart-plugin-2.0.6.jar(这个在struts-2.0.6-all.zip可以找到了):           注意:除去struts2需要的基本包外,Jfreechart所用到的包就是最下面的那三个! 1.依次帖web.xml.strut

JFreeChart的使用

JFreeChart一个免费的Java图表库.JFreeChart支持饼图(2D和3D),条形图(水平和垂直,整齐堆叠),线图,散点图,时序图, 高低的开闭图,烛台图,甘特图,结合地块,温度计,刻度盘和更多.JFreeChart可以在应用程序中使用,小程序,servlet和JSP. 由于JFreeChart可以生成的图像很多,在此简要列举三个(饼图,柱状图,曲线图)作为入门,学习如何整合Struts如何显示在JSP中 一.搭建Struts 首先要有一个搭建好的Struts框架,在此基础上我们就可

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.getConte

Struts2+JFreeChart

前言 关于Struts2入门以及提高等在这里就不介绍了,但是关于Struts2的学习有以下推荐: struts2-showcase-2.0.6.war:这个是官方自带的Demo(struts-2.0.6-all.zip\struts-2.0.6\apps目录下),非常全面,直接部署就可以了(很多朋友Struts2能学很好我估计还是直接从这里学来的). wiki-WebWork:入了门的朋友应该都知道,strust2由webwork2和struts1.x合并起来的,但主要还是以webwork2为主

struts2+MySQL+jfreechart

1.所需要的jar包如图1所示 2.工程目录的格式如图2所示 2.新建配置文件(struts-jfreechart.xml) <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package n