`
zjx2388
  • 浏览: 1303409 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

利用TimeSeriesCollection生成的x轴为时间的折线图

    博客分类:
  • J2EE
阅读更多
package com.potevio.rnd.tobacco.mine;

import java.util.Map;

/**
 * @description 数据BEAN
 * @author Zhou-Jingxian
 */
public class Bean {

	private String goods_name ;
	private Map<String,Double> priceindexMap;
	
	public String getGoods_name() {
		return goods_name;
	}
	public void setGoods_name(String goods_name) {
		this.goods_name = goods_name;
	}

	public Map<String, Double> getPriceindexMap() {
		return priceindexMap;
	}
	public void setPriceindexMap(Map<String, Double> priceindexMap) {
		this.priceindexMap = priceindexMap;
	}
	
	
}

 

package com.potevio.rnd.tobacco.mine;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;

/**
 * @description 使用JFreeChart组建,生成一个价格随日期的走势图表
 * @author Zhou-Jingxian
 */
public class TimeSeriesChartUtil { 
	
	private String type;//month,year
	private int width ;//后台计算
	private int height;//后台计算
	private String title;//图表的主标题
	private String subTitle;//图表的子标题
	private String xName;//可默认值:月份
	private String yName;//可默认值:价格指数
	
	/***
	 * constructor function
	 * @param type
	 * @param title
	 * @param subTitle
	 * @param xName
	 * @param yName
	 */
	public TimeSeriesChartUtil(String type,String title,String subTitle,String xName,String yName){
		this.type = type;
		this.title = title;
		this.subTitle = subTitle;
		this.xName = xName;
		this.yName = yName;
		if("month".equals(type)){
			this.width = 800;
			this.height = 600;
		}else if("year".equals(type)){
			this.width = 600;
			this.height = 400;
		}
	}
	
	/** 根据TimeSeriesCollection创建JFreeChart对象*/   
    public JFreeChart createChart(TimeSeriesCollection dataset) {   
    	
    	JFreeChart chart = ChartFactory.createTimeSeriesChart(this.title, this.xName,this.yName, dataset, true, true, true);
    	
		XYPlot plot = (XYPlot) chart.getPlot();
		XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
		//设置网格背景颜色
		plot.setBackgroundPaint(Color.white);
		//设置网格竖线颜色
		plot.setDomainGridlinePaint(Color.pink);
		//设置网格横线颜色
		plot.setRangeGridlinePaint(Color.pink);
		//设置曲线图与xy轴的距离
		plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
		//设置曲线是否显示数据点
		xylineandshaperenderer.setBaseShapesVisible(true);
		//设置曲线显示各数据点的值
		XYItemRenderer xyitem = plot.getRenderer();   
		xyitem.setBaseItemLabelsVisible(true);   
		xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
		xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
		plot.setRenderer(xyitem);
		
		//设置子标题
		TextTitle subtitle = new TextTitle(this.subTitle, new Font("黑体", Font.BOLD, 12));
		chart.addSubtitle(subtitle);
		//设置主标题
		chart.setTitle(new TextTitle(this.title, new Font("隶书", Font.ITALIC, 15)));
		//设置背景颜色
		chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000,Color.blue));
		chart.setAntiAlias(true);
  
        return chart;   
    }   
  
    /**创建TimeSeriesCollection对象  */
    public TimeSeriesCollection createDataset(List<Bean> datalist){
    	
    	//时间曲线数据集合
		TimeSeriesCollection lineDataset = new TimeSeriesCollection();
		for(int i=0;i<datalist.size();i++){
        	Bean bean = datalist.get(i);
        	TimeSeries series = new TimeSeries(bean.getGoods_name(),Month.class);
    		Map<String,Double> pimap = bean.getPriceindexMap(); 
    		Set piset = pimap.entrySet();   
    		Iterator piIterator = piset.iterator();   
    		while(piIterator.hasNext()){   
    		    Map.Entry<String,Double> hiddenMapEntry = (Map.Entry<String,Double>)piIterator.next();  
    		    String key = hiddenMapEntry.getKey();   
    		    int year = Integer.parseInt(key.substring(0,4));
    		    int month = Integer.parseInt(key.substring(4, 6));
    		    series.add(new Month(month,year),hiddenMapEntry.getValue());
    		}  
        	lineDataset.addSeries(series);
        }
		return lineDataset;
    }
   	
	/**保存为文件*/   
    public void saveAsFile(JFreeChart chart, String outputPath) {   
        FileOutputStream out = null;   
        try {   
            File outFile = new File(outputPath);   
            if (!outFile.getParentFile().exists()) {   
                outFile.getParentFile().mkdirs();   
            }   
            out = new FileOutputStream(outputPath);   
            // 保存为PNG   
            ChartUtilities.writeChartAsPNG(out, chart, width, height);   
            // 保存为JPEG   
            // ChartUtilities.writeChartAsJPEG(out, chart, width, height);   
            out.flush();   
        } catch (FileNotFoundException e) {   
            e.printStackTrace();   
        } catch (IOException e) {   
            e.printStackTrace();   
        } finally {   
            if (out != null) {   
                try {   
                    out.close();   
                } catch (IOException e) {   
                    // do nothing   
                }   
            }   
        }   
    }   
  
	public int getWidth() {
		return width;
	}

	public void setWidth(int width) {
		this.width = width;
	}

	public int getHeight() {
		return height;
	}

	public void setHeight(int height) {
		this.height = height;
	}   
	
	public String getXName() {
		return xName;
	}

	public void setXName(String name) {
		xName = name;
	}

	public String getYName() {
		return yName;
	}

	public void setYName(String name) {
		yName = name;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}


	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getSubTitle() {
		return subTitle;
	}

	public void setSubTitle(String subTitle) {
		this.subTitle = subTitle;
	}

}

 

package com.potevio.rnd.tobacco.mine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jfree.chart.JFreeChart;
import org.jfree.data.time.TimeSeriesCollection;


/**
 * @description 构造数据,测试图片生成
 * @author Zhou-Jingxian
 */
public class Main {
	  
    public static void main(String[] args) {
    	
    	TimeSeriesChartUtil util = new TimeSeriesChartUtil("year", "重点品牌价格走势图", "2009年8-10月走势图", "时间", "价格指数");
    	List<Bean> datalist = new ArrayList<Bean>();
    	
    	Bean bean1 = new Bean();
    	bean1.setGoods_name("中华");
    	Map<String,Double> priceindexMap1 = new HashMap<String,Double>();
    	priceindexMap1.put("200903", 99.86);
    	priceindexMap1.put("200904", 99.8);
    	priceindexMap1.put("200905", 99.97);
    	priceindexMap1.put("200906", 99.96);
    	priceindexMap1.put("200907", 99.86);
    	priceindexMap1.put("200908", 99.8);
    	priceindexMap1.put("200909", 99.97);
    	priceindexMap1.put("200910", 99.96);
    	bean1.setPriceindexMap(priceindexMap1);
    	datalist.add(bean1);
    	
    	Bean bean2 = new Bean();
    	bean2.setGoods_name("芙蓉王");
    	Map<String,Double> priceindexMap2 = new HashMap<String,Double>();
    	priceindexMap2.put("200903", 100.12);
    	priceindexMap2.put("200904", 100.2);
    	priceindexMap2.put("200905", 100.0);
    	priceindexMap2.put("200906", 100.08);
    	priceindexMap2.put("200907", 100.12);
    	priceindexMap2.put("200908", 100.2);
    	priceindexMap2.put("200909", 100.0);
    	priceindexMap2.put("200910", 100.08);
    	bean2.setPriceindexMap(priceindexMap2);
    	datalist.add(bean2);
    	
    	Bean bean3 = new Bean();
    	bean3.setGoods_name("云烟");
    	Map<String,Double> priceindexMap3 = new HashMap<String,Double>();
    	priceindexMap3.put("200903", 99.77);
    	priceindexMap3.put("200904", 99.7);
    	priceindexMap3.put("200905", 99.83);
    	priceindexMap3.put("200906", 99.93);
    	priceindexMap3.put("200907", 99.77);
    	priceindexMap3.put("200908", 99.7);
    	priceindexMap3.put("200909", 99.83);
    	priceindexMap3.put("200910", 99.93);
    	bean3.setPriceindexMap(priceindexMap3);
    	datalist.add(bean3);
    	
        //步骤1:创建XYDataset对象(准备数据) 
        TimeSeriesCollection dataset = util.createDataset(datalist);
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置 
        JFreeChart freeChart = util.createChart(dataset);
        
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等   
        util.saveAsFile(freeChart, "F:\\jfreechart\\lineXY_"+Math.random()*20+".png");   
    }   
  
}

 生成的效果图:



 

  • 大小: 28.5 KB
分享到:
评论

相关推荐

    超爽的抽屉效果.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    关于学习C语言时写的代码.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    机械臂论文.doc

    机械臂论文.doc

    S7200 and WINCC flexible.doc

    S7200 and WINCC flexible.doc

    27.大学生体质测试管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文

    27.大学生体质测试管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细设计文档介绍链接:http://t.csdnimg.cn/jtyYh 内容概要: 系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管理、体质测试管理、测试报告管理、测试成绩管理、留言板、系统管理;基本上实现了整个大学生体质测试管理系统信息管理的过程。 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    c语言-c语言编程基础之leetcode题解第24题两两交换链表中的节点.zip

    c语言 c语言_c语言编程基础之leetcode题解第24题两两交换链表中的节点

    电子麦克风.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    文字转语音朗读器.txt

    文字转语音朗读器.txt

    C语言学习,语言学习.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习平台java代码-平面设计课程在线学习平台java代码-代码

    平面设计课程在线学习-平面设计课程在线学习平台-平面设计课程在线学习平台源码-平面设计课程在线学习平台java代码-平面设计课程在线学习平台设计与实现-基于ssm的平面设计课程在线学习平台-基于Web的平面设计课程在线学习平台设计与实现-平面设计课程在线学习网站-平面设计课程在线学习网站源码-平面设计课程在线学习网站java代码-平面设计课程在线学习项目-平面设计课程在线学习项目代码-平面设计课程在线学习系统-平面设计课程在线学习系统源码-平面设计课程在线学习管理系统-平面设计课程在线学习管理系统java代码-平面设计课程在线学习代码 1、技术栈:java,ssm,spring,springmvc,vue,ajax,maven,mysql,MyBatisPlus等 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:SQLyog/Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器 2、系统的实现 用户信息 图片素材 视频素材 摘 要 I 目 录 III 第1章 绪论

    ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 ་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip་基于C+++OpenCV技术实现的动态目标的追踪!源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    DSP实用教程PPT上.ppt

    DSP实用教程PPT上.ppt

    基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip基于Android+OpenCV的司机疲劳检测项目源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    标记view.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    Python 入门教程快速学会 Python.docx

    python入门 假设我们有这么一项任务 : 简单测试局域网中的电脑是否连通 . 这些电脑的 ip 范围 从 192.168.0.101 到 192.168.0.200. 思路 : 用 shell 编程 .(Linux 通常是 bash 而 Windows 是批处理脚本 ). 例如 , 在 Windows 上用 ping ip 的命令依次测试各个机器并得到控制台输出 . 由于 ping 通的时候控制台文 本通常是 "Reply from ... " 而不通的时候文本是 "time out ... " , 所以 , 在结果中进行 字符串查找 , 即可知道该机器是否连通 .实现 :Java 代码如下

    临写字帖.zip

    临写字帖.zip

    英飞凌PowerCode软件安装教程

    英飞凌PowerCode软件安装教程,包括下载链接和安装步骤

    仿美图秀秀拼图功能使用代码的时候,请修改2014-03big文件放到mntsdcardclothe目录下。.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    本科获奖毕业论文-基于DSP的语音信号的处理.doc

    本科获奖毕业论文-基于DSP的语音信号的处理.doc

    RTKLIB上机实习资料

    有关RTKLIB资源 实习使用 参考Blog地址:https://blog.csdn.net/CUGLin/article/details/137975165?spm=1001.2014.3001.5501

Global site tag (gtag.js) - Google Analytics