`
zjx2388
  • 浏览: 1336132 次
  • 性别: 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
分享到:
评论

相关推荐

    Java JFreeChart 后台生成折线图

    这里以折线图为例,使用`JFreeChart.createLineChart()`方法。 ```java JFreeChart chart = ChartFactory.createLineChart( "折线图示例", // 图表标题 "类别", // X轴标签 "值", // Y轴标签 dataset // 数据集...

    jfreechart根据24小时数据画折线图

    该示例展示了如何自定义X轴和Y轴的刻度,以及如何设定时间间隔为每小时,并以整点作为折点绘制折线图。 #### 三、代码解析 1. **导入必要的类:** ```java import java.awt.Color; import java.awt.Font; ...

    java实现各种数据统计图(柱形图,饼图,折线图)

    可以使用`TimeSeriesCollection`来组织时间序列数据,然后通过`ChartFactory.createLineChart()`创建折线图: ```java TimeSeriesCollection dataset = ... // 创建数据集 JFreeChart chart = ChartFactory....

    java饼状图和折线图

    3. 使用`JFreeChart`的`createXYLineChart()`方法创建折线图,传入数据集、图表标题、x轴标签、y轴标签等参数。 4. 同样,可以创建`ChartFrame`来显示或保存为图像。 通过运行这两个`.java`文件,用户可以立即看到...

    jfreechat 饼图,柱状,折线图示例代码

    同样,你需要先创建一个`TimeSeriesCollection`对象,然后将数据添加到其中,最后使用`LineChart`类的构造函数生成折线图。例如: ```java TimeSeries series = new TimeSeries("Series"); series.add(new ...

    JFreeChart实时折线图

    例如,对于折线图,可以使用`createLineChart()`方法,传入图表的标题、X轴标签、Y轴标签以及数据源(`CategoryDataset`)。 2. **设置数据源**: 数据源是图表的关键,它包含图表上每个系列的数据。你可以创建一个`...

    JfreeChart的最常用的制图代码实例(饼图,柱图,SeriesChart,折线图)附带工程源码。

    "X轴标签", // X轴标签 "Y轴标签", // Y轴标签 dataset // 数据集 ); ChartFrame frame = new ChartFrame("我的折线图", chart); frame.pack(); frame.setVisible(true); ``` 以上代码示例展示了...

    JFreeChart 各种图形的 web工程

    JFreeChart是一款强大的Java图形库,它为开发者提供了绘制各种复杂图表的能力,包括折线图、饼形图、柱状图、域状图以及组合图表等。这个特定的例子是将JFreeChart应用于Web工程中,解决了在Web环境下可能出现的乱码...

    jfreechart-1.0.13-developer-guide

    为了创建这种图表,首先需要创建一个 `TimeSeriesCollection` 对象来存储时间序列数据,然后使用 `ChartFactory.createTimeSeriesChart()` 方法生成图表实例。此外,还可以对轴进行格式化,以更好地展示时间数据。 ...

    生成chart图片的jar包.

    - 折线图(XYLineChart):适用于x、y坐标轴的数据。 - 直方图(Histogram):用于展示数据分布。 - 时间序列图(TimeSeriesChart):专门用于处理时间序列数据。 3. **创建图表**:创建图表的基本步骤通常包括...

    JFreeChart简单使用

    `CategoryPlot`是柱状图的主要组件,它管理着X轴和Y轴的数据映射。通过`BarRenderer`,你可以定制条形的颜色、宽度等样式。 3. **折线图(Line Chart)** 折线图用于表示数据随时间变化的趋势。使用`...

    jfreechart api

    `CategoryDataset`用于柱状图、折线图等,而`TimeSeriesCollection`适用于时间序列数据。 4. **Plot**: `Plot` 类负责管理图表的数据和渲染方式。不同的图表类型对应不同的子类,如`CategoryPlot`和`XYPlot`。你...

    在 JavaFx 中使用 JFreeChart 生成图表

    在JavaFX中,JFreeChart是一个非常有用的库,它允许开发者创建各种复杂的图表,如折线图、柱状图、饼图、散点图等。本文将深入探讨如何结合JavaFX与JFreeChart来实现图表的生成。 首先,我们需要了解JFreeChart库的...

    JFreeChart画图实例

    在柱状图和折线图中,数据集通常是`CategoryDataset`或`TimeSeriesCollection`,它们可以容纳多个系列的数据,每个系列包含一组相关数据点。 接下来,Ibatis作为数据访问层,用于从数据库检索数据。它通过SQL映射...

    JFreeChart

    JFreeChart 是一个流行的 Java 图表库,它为开发者提供了丰富的图表绘制功能,包括折线图、柱状图、饼图、散点图、甘特图等多种类型的图表。这个开源项目广泛应用于数据可视化,尤其是在Java应用程序中,能够帮助...

    Java程序中用JFreeChart制作图形报表

    - 使用`ChartFactory`创建图表,例如`JFreeChart chart = ChartFactory.createLineChart()`,指定图表标题、数据集、X轴和Y轴标签。 - 创建`ChartPanel`,`ChartPanel chartPanel = new ChartPanel(chart)`。 - ...

    jfreechar各种图

    - **折线图**(Line Chart):用于显示趋势或随时间变化的数据。 - **柱状图**(Bar Chart):适合比较类别之间的数值差异。 - **饼图**(Pie Chart):展示各部分占整体的比例。 - **散点图**(Scatter Plot)...

    JfreeChart单条曲线实例

    `createChart`方法创建了一个时间序列图表,设置了标题、X轴和Y轴标签,以及数据源(`TimeSeriesCollection`)。 #### 设置图表属性 - **时间序列数据准备**:`timeSeries`对象被创建为`TimeSeries`类型,用于存储...

    jfreechart-作图 所有图形代码示例

    数据集可以是`CategoryDataset`(适用于分类数据,如柱状图、饼图)或`TimeSeriesCollection`(适用于时间序列数据,如折线图)。你可以自定义数据结构来满足特定需求。 3. **Plot**:负责管理图表的布局和绘制,每...

    JFreeChart 1.0.6 开发者文档

    这些方法接受图表的标题、数据源、x轴标签和y轴标签作为参数。 **四、数据源与图表组件** JFreeChart 使用 `CategoryDataset` 和 `XYDataset` 接口表示分类数据和XY坐标数据。开发者可以实现这些接口或者使用提供...

Global site tag (gtag.js) - Google Analytics