首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

java干折线图(转)

2013-07-08 
java作折线图(转)引入两jar包:jcommon-1.0.16.jarjfreechart-1.0.13.jar?直接上代码:package com.potevio.

java作折线图(转)

引入两jar包:

jcommon-1.0.16.jar

jfreechart-1.0.13.jar

?

直接上代码:

package com.potevio.rnd.tobacco.mine;import java.awt.Font;import java.awt.RenderingHints;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.data.time.TimeSeriesCollection;/** * @description 构造数据,测试图片生成 * @author Zhou-Jingxian */public class Main {       public static void main(String[] args) {                  TimeSeriesChartUtil util = new TimeSeriesChartUtil("month", "服务端失败率变化曲线图", "2013-4-21至2013-4-27", "时间", "失败率");     List<Bean> datalist = new ArrayList<Bean>();          Bean bean1 = new Bean();     bean1.setGoods_name("中华");     Map<String,Double> priceindexMap1 = new HashMap<String,Double>();     priceindexMap1.put("2013-04-21", 0.23);     priceindexMap1.put("2013-04-22", 0.24);     priceindexMap1.put("2013-04-23", 0.23);     priceindexMap1.put("2013-04-24", 0.22);     priceindexMap1.put("2013-04-25", 0.23);     priceindexMap1.put("2013-04-26", 0.24);     priceindexMap1.put("2013-04-27", 0.23);     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, "D:\\test\\chenwenbiao_qx.png");       }     } 

?

?

package com.potevio.rnd.tobacco.mine;import java.awt.Color;import java.awt.Font;import java.awt.GradientPaint;import java.awt.RenderingHints;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.StandardChartTheme;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.Day;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,yearprivate 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) {//设置主题解决乱码      StandardChartTheme theme = new StandardChartTheme("unicode") {      public void apply(JFreeChart chart) {       chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,         RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);       super.apply(chart);      }     };     theme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 20));     theme.setLargeFont(new Font("宋体", Font.PLAIN, 14));     theme.setRegularFont(new Font("宋体", Font.PLAIN, 12));     theme.setSmallFont(new Font("宋体", Font.PLAIN, 10));     ChartFactory.setChartTheme(theme);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(),Day.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(5, 7));int day = Integer.parseInt(key.substring(8,10));System.out.println("year:" + year + "\tmonth:" + month + "\tday:" + day);series.add(new Day(day , 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);// 保存为PNGChartUtilities.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.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; }  }  

?

改自:java报表折线图

?

出现如下错误:

Exception?in?thread?"main"?java.lang.NoSuchMethodError:?org.jfree.ui.RectangleInsets.<init>(DDDD)V

原因:

jdk的版本太低了,jfreechart必须在1.0.13以上,jdk必须在1.4.0.b8以上

jcommon.jar?换成?jcommon-1.0.16.jar后在jdk1.4.0.6上跑也ok
jfreechart_1.0.13.jar

热点排行