jfreechart采用TimeSeriesChart并更改热点内容
来源:互联网 发布:淘宝免运费怎么设置 编辑:程序博客网 时间:2024/06/18 17:40
/** * */package com.huaxia.bank.test;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.text.DateFormat;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.DateTickUnit;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.labels.StandardCategoryToolTipGenerator;import org.jfree.chart.labels.StandardXYToolTipGenerator;import org.jfree.chart.labels.XYToolTipGenerator;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.StandardXYItemRenderer;import org.jfree.chart.renderer.xy.XYItemRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Day;import org.jfree.data.time.Hour;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.ApplicationFrame;import org.jfree.ui.RectangleInsets;/** * @author cuiran * */public class TimeSeriesTest { public final static String MONTH = "MONTH"; public final static String DAY = "DAY"; public final static String HOUR = "HOUR"; private JFreeChart rChart = null; //图表对象 public String chartTitle = ""; //图表标题 public String chartXdesc = ""; //X轴标题 public String chartYdesc = ""; //Y轴标题 public String chartSeriesDesc = ""; //曲线说明 public String chartSeriesDesc1 = ""; //曲线说明 public int graphWidth = 600; //默认宽度 public int graphHigh = 400; //默认高度 public String timeFormat = "MM/yyyy"; // 按日:MM-dd ,按小时:hh:mm // 用于标志用户选择的是按哪种查询统计周期类型(年、月、天、小时). // 年:YEAR, 月:MONTH, 天:DAY, 小时:HOUR public String periodType = ""; // 用于确定时间间隔 public int dateInterval = 1; //统计结果数据集 TimeSeriesCollection statDataset = new TimeSeriesCollection(); TimeSeries monthSeries = null; //月份统计图数据集合 TimeSeries monthSeries1 = null; //月份统计图数据集合 TimeSeries daySeries = null; //天数统计图数据集合 TimeSeries hourSeries = null; //小时统计图数据集合 public void createTread(){ setTimeSeriesStatType(); } /** * 创建趋势图表 * @return JFreeChart 图表对象JFreeChart */ private JFreeChart createTrendChart(){ JFreeChart _freeChart = ChartFactory.createTimeSeriesChart(chartTitle, chartXdesc, chartYdesc, getTimeSeriesStatDataSet(), true, true, true); _freeChart.setBackgroundPaint(Color.white); XYPlot _xyplot = _freeChart.getXYPlot(); _xyplot.setOrientation(PlotOrientation.VERTICAL); _xyplot.setBackgroundPaint(Color.lightGray); _xyplot.setDomainGridlinePaint(Color.white); _xyplot.setRangeGridlinePaint(Color.white); _xyplot.setAxisOffset(new RectangleInsets(1.0, 2.0, 2.0, 10.0)); XYItemRenderer renderer= _xyplot.getRenderer(); DateFormat df=new SimpleDateFormat("yyyy年MM月"); NumberFormat nf= NumberFormat.getNumberInstance(); StandardXYToolTipGenerator toolg=new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,df,nf); renderer.setToolTipGenerator(toolg);// DateAxis dateaxis = (DateAxis) _xyplot.getDomainAxis(); if (periodType.equalsIgnoreCase("MONTH")){ if (dateInterval > 0) { dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, dateInterval)); } }else if (periodType.equalsIgnoreCase("DAY")){ if (dateInterval > 0) { dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, dateInterval)); } }else if (periodType.equalsIgnoreCase("HOUR")){ if (dateInterval > 0) { dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, dateInterval)); } } dateaxis.setDateFormatOverride(new SimpleDateFormat(timeFormat)); return _freeChart; } /** * 增加走势图数据 * @param periodType 区间类型 * @param year 年份 * @param month 月份 * @param day 日期 * @param hour 时间 * @param statData 统计数据 */ public void addTimeSeriesUnitData(int year, int month,int statData) { if (periodType.equalsIgnoreCase("MONTH")){ if (monthSeries == null){ monthSeries = new TimeSeries(chartSeriesDesc,Month.class); } monthSeries.add(new Month(month, year), statData); System.out.println("月"); }else if (periodType.equalsIgnoreCase("DAY")){ if (daySeries == null){ daySeries = new TimeSeries(chartSeriesDesc, Day.class); }// daySeries.add(new Day(day, month, year), statData); }else if (periodType.equalsIgnoreCase("HOUR")){ if (hourSeries == null){ hourSeries = new TimeSeries(chartSeriesDesc, Hour.class); }// hourSeries.add(new Hour(hour, day, month, year), statData); } } /** * 增加走势图数据 * @param periodType 区间类型 * @param year 年份 * @param month 月份 * @param day 日期 * @param hour 时间 * @param statData 统计数据 */ public void addTimeSeriesUnitDataAll(int year, int month,int statData) { if (periodType.equalsIgnoreCase("MONTH")){ if (monthSeries1 == null){ monthSeries1 = new TimeSeries(chartSeriesDesc1,Month.class); } monthSeries1.add(new Month(month, year), statData); System.out.println("月"); }else if (periodType.equalsIgnoreCase("DAY")){ if (daySeries == null){ daySeries = new TimeSeries(chartSeriesDesc1, Day.class); }// daySeries.add(new Day(day, month, year), statData); }else if (periodType.equalsIgnoreCase("HOUR")){ if (hourSeries == null){ hourSeries = new TimeSeries(chartSeriesDesc1, Hour.class); }// hourSeries.add(new Hour(hour, day, month, year), statData); } } /** * 设置走势图统计的区间类型 * @param periodType 区间类型 */ private void setTimeSeriesStatType() { if (periodType.equalsIgnoreCase("MONTH")){ statDataset.addSeries(monthSeries); statDataset.addSeries(monthSeries1); }else if (periodType.equalsIgnoreCase("DAY")){ statDataset.addSeries(daySeries); }else if (periodType.equalsIgnoreCase("HOUR")){ statDataset.addSeries(hourSeries); } } /** * 获得时序图的统计数据 * @return XYDataset 统计数据 */ private XYDataset getTimeSeriesStatDataSet() { statDataset.setDomainIsPointsInTime(true); return statDataset; } public int getDateInterval() { return dateInterval; } //字体配置方法(解决中文问题) private static void configFont(JFreeChart chart) { // 配置字体 Font xfont = new Font("宋体", Font.PLAIN, 12);// X轴 Font yfont = new Font("宋体", Font.PLAIN, 12);// Y轴 Font kfont = new Font("宋体", Font.PLAIN, 12);// 底部 Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题 XYPlot plot = chart.getXYPlot();// 图形的绘制结构对象 // 图片标题 chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont)); // 底部// chart.getLegend().setItemFont(kfont); // 横轴框里的标题字体 chart.getLegend().setItemFont(kfont); // 横轴列表字体 plot.getDomainAxis().setTickLabelFont(kfont); // 横轴小标题字体 plot.getDomainAxis().setLabelFont(kfont); // Y 轴 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(yfont); rangeAxis.setLabelPaint(Color.BLUE); // 字体颜色 rangeAxis.setTickLabelFont(yfont); } public void setDateInterval(int dateInterval) { this.dateInterval = dateInterval; } public static void main(String arhs[]){ TimeSeriesTest trendChart = new TimeSeriesTest(); trendChart.chartTitle = "一年走势图"; trendChart.chartSeriesDesc = "确认数量"; trendChart.chartSeriesDesc1 = "风险数量"; trendChart.chartXdesc = "月份"; trendChart.chartYdesc = "数量"; trendChart.graphHigh = 400; trendChart.graphWidth = 600; trendChart.timeFormat = "yyyy年MM月"; trendChart.periodType = TimeSeriesTest.MONTH; double baseData = 100.0; double rData = baseData; trendChart.addTimeSeriesUnitData(2011, 11,25); trendChart.addTimeSeriesUnitData(2011, 12,45); trendChart.addTimeSeriesUnitData(2012, 1, 50); trendChart.addTimeSeriesUnitData(2012, 2, 80); trendChart.addTimeSeriesUnitData(2012, 3, 30); trendChart.addTimeSeriesUnitData(2012, 4, 10); trendChart.addTimeSeriesUnitDataAll(2011, 11,45); trendChart.addTimeSeriesUnitDataAll(2011, 12,65); trendChart.addTimeSeriesUnitDataAll(2012, 1, 70); trendChart.addTimeSeriesUnitDataAll(2012, 2, 90); trendChart.addTimeSeriesUnitDataAll(2012, 3, 50); trendChart.addTimeSeriesUnitDataAll(2012, 4, 40); trendChart.createTread(); JFreeChart chart =trendChart.createTrendChart(); trendChart.configFont(chart); final ChartFrame preview = new ChartFrame("一年走势图",chart); preview.addWindowListener(new WindowAdapter() { public void windowClosing(final WindowEvent event) { preview.dispose(); } }); preview.pack(); //调整预览窗口的大小和位置,适合屏幕,并且居中// Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//// preview.setSize(screenSize.width,screenSize.height-50);//适合屏幕,50表示把工具栏要考虑在内//// Dimension frameSize = preview.getSize();//// if (frameSize.height > screenSize.height) {//// frameSize.height = screenSize.height;//// }//// if (frameSize.width > screenSize.width) {//// frameSize.width = screenSize.width;//// }//// preview.setLocation( (screenSize.width - frameSize.width) / 2,//// (screenSize.height - frameSize.height-50) / 2); //显示报表预览窗口 preview.setVisible(true); }}
运行效果如图:
部分代码:
DateFormat df=new SimpleDateFormat("yyyy年MM月"); NumberFormat nf= NumberFormat.getNumberInstance(); StandardXYToolTipGenerator toolg=new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,df,nf); renderer.setToolTipGenerator(toolg);
加上代码可以显示对应的图点
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)_xyplot.getRenderer(); //设置网格背景颜色 _xyplot.setBackgroundPaint(Color.white); //设置网格竖线颜色 _xyplot.setDomainGridlinePaint(Color.pink); //设置网格横线颜色 _xyplot.setRangeGridlinePaint(Color.pink); //设置曲线图与xy轴的距离 _xyplot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D)); //设置曲线是否显示数据点 xylineandshaperenderer.setBaseShapesVisible(true); //设置曲线显示各数据点的值
- jfreechart采用TimeSeriesChart并更改热点内容
- jfreechart采用TimeSeriesChart并更改热点内容
- jfreechart采用TimeSeriesChart并更改热点内容
- jfreechart生成热点图
- Jquery 获取tr并更改td内容
- JAVA 读取文件并更改文件内容
- 使用JFreeChart生成热点图表
- 使用JFreeChart生成热点图表
- 使用JFreeChart生成热点图表
- 用JfreeChart创建热点图片
- 使用JFreeChart生成热点图表
- 使用JFreeChart生成热点图表
- 有热点的JfreeChart柱型图
- J2EE:JFreeChart生成热点图表
- java生成图表---采用jfreechart
- JFreechart生成带热点的图
- JFreechart生成带热点的饼图
- 使用JFreeChart生成热点图表实现交互作用
- CloneFolder 2.0被用户更新了
- ASCII码表完整版
- C# 配置文件读取与修改
- VB字符串函数大全(经典收藏)
- C++ #pragma once与 #ifndef的区别
- jfreechart采用TimeSeriesChart并更改热点内容
- XT800刷机
- Davinci DM6446之linux-2.6.18移植
- volatile 的作用
- 查看Linux网络连接及连接总数
- 介绍常见的流程图符号及流程图的例子
- Oracle中job的使用详解
- IGMP snooping
- 对于'Consistent Gets',''Physical Reads'和'DB Block Gets'的理解和解释