java中jfreechart的实现.柱状图+饼状图
jar包:jfreechart-1.0.8a.jar
java类1
以下类是柱状图和饼状图实现的公共类,要使用的时候直接调用以下类的方法就是
package com.hz.util;import java.awt.Font;import java.io.IOException;import java.text.DecimalFormat;import java.text.NumberFormat;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.AxisLocation;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.block.BlockContainer;import org.jfree.chart.block.BorderArrangement;import org.jfree.chart.block.EmptyBlock;import org.jfree.chart.entity.StandardEntityCollection;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.DatasetRenderingOrder;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer3D;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.servlet.ServletUtilities;import org.jfree.chart.title.CompositeTitle;import org.jfree.chart.title.LegendTitle;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.jfree.ui.RectangleEdge;import org.jfree.ui.RectangleInsets;import org.jfree.ui.TextAnchor;public class BarChart {protected HttpServletRequest request = ServletActionContext.getRequest();//柱状图的实现方法public JFreeChartPojo barCharts(String title,String x,String y,DefaultCategoryDataset dataset) throws IOException{JFreeChartPojo jFreeChartPojo = new JFreeChartPojo();JFreeChart chart = ChartFactory.createBarChart3D(title, x, y, dataset, PlotOrientation.VERTICAL, false, false, false); CategoryPlot plot = chart.getCategoryPlot();CategoryAxis categoryaxis = plot.getDomainAxis();NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); categoryaxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));//X说明的字体 categoryaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));//X显示的字体 numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));//Y显示的字体 numberaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));//Y说明的字体 numberaxis.setUpperMargin(0.1);BarRenderer3D renderer = (BarRenderer3D) plot.getRenderer();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);renderer.setBaseItemLabelFont(new Font("TimesRoman", Font.PLAIN, 12)); //柱状图上面的字体renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); renderer.setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值 int k = dataset.getColumnCount(); int b; //以下判断是控制柱子的多少在页面上显示的距离 if (k == 1) { plot.getDomainAxis().setLowerMargin(0.2);//设置柱子距离左端距离 plot.getDomainAxis().setUpperMargin(0.2);//设置柱子距离右端距离 ((BarRenderer3D) plot.getRenderer()).setItemMargin(0.5); b=200; }else if(k<4){ plot.getDomainAxis().setLowerMargin(0.2);//设置柱子距离左端距离 plot.getDomainAxis().setUpperMargin(0.2);//设置柱子距离右端距离 renderer.setItemMargin(0.001); b=250; } else if (k < 8) { b=500; renderer.setMaximumBarWidth(0.04);//设置柱子的宽度 renderer.setMinimumBarLength(0.1); double margin = (1.0 - k * 0.08) / 3; plot.getDomainAxis().setLowerMargin(0.05); plot.getDomainAxis().setUpperMargin(0.05); ((BarRenderer3D) plot.getRenderer()).setItemMargin(margin); } else if(k<15){ b=800; renderer.setMaximumBarWidth(0.04);//设置柱子的最大宽度 ((BarRenderer3D) plot.getRenderer()).setItemMargin(0.1); }else if(k<40){ b=1000; renderer.setMaximumBarWidth(0.03);//设置柱子的最大宽度 plot.getDomainAxis().setLowerMargin(0.02); plot.getDomainAxis().setUpperMargin(0.02); ((BarRenderer3D) plot.getRenderer()).setItemMargin(0.0001); }else{ b=1000; } plot.setRenderer(renderer);HttpSession session = request.getSession(); String filename = ServletUtilities.saveChartAsPNG(chart, b, 400, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; jFreeChartPojo.setFilename(filename);jFreeChartPojo.setGraphURL(graphURL);return jFreeChartPojo;} //-------//饼状图实现方法 //-------public JFreeChartPojo pieCharts(DefaultPieDataset data,String title) throws IOException{JFreeChartPojo jFreeChartPojo = new JFreeChartPojo();PiePlot plot = new PiePlot(data);plot.setCircular(true);plot.setLabelFont(new Font("宋体", Font.PLAIN, 13));StandardPieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator(("{0}={1}({2})"), NumberFormat.getNumberInstance(),new DecimalFormat("0.00%"));plot.setLabelGenerator(generator);JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色chart.setTitle(title);//可选,设置图片标题ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//500是图片长度,300是图片高度HttpSession session = request.getSession();String filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; jFreeChartPojo.setFilename(filename);jFreeChartPojo.setGraphURL(graphURL);return jFreeChartPojo;}public JFreeChartPojo dualAxisCharts() throws IOException{JFreeChartPojo jFreeChartPojo = new JFreeChartPojo(); String s = "S1"; String s3 = "无锡--上海"; String s4 = "Category 2"; String s5 = "Category 3"; String s6 = "Category 4"; String s7 = "Category 5"; String s8 = "Category 6"; String s9 = "Category 7"; String s10 = "Category 8"; DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset(); defaultcategorydataset.addValue(1, s, s3); defaultcategorydataset.addValue(4, s, s4); defaultcategorydataset.addValue(3, s, s5); defaultcategorydataset.addValue(5, s, s6); defaultcategorydataset.addValue(5, s, s7); defaultcategorydataset.addValue(7, s, s8); defaultcategorydataset.addValue(7, s, s9); defaultcategorydataset.addValue(8, s, s10); JFreeChart chart = ChartFactory.createBarChart("Dual Axis Chart", "Category", "Value", defaultcategorydataset, PlotOrientation.VERTICAL, false, true, false); CategoryPlot categoryplot = (CategoryPlot)chart.getPlot(); categoryplot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); //CategoryDataset categorydataset =defaultcategorydataset_1; //categoryplot.setDataset(1, categorydataset); categoryplot.mapDatasetToRangeAxis(1, 1); CategoryAxis categoryaxis = categoryplot.getDomainAxis(); categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); NumberAxis numberaxis = new NumberAxis("Secondary"); categoryplot.setRangeAxis(1, numberaxis); LineAndShapeRenderer lineandshaperenderer =new LineAndShapeRenderer(); // lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator()); lineandshaperenderer.setBaseLinesVisible(true);// lineandshaperenderer.setShapesFilled(true);// lineandshaperenderer.setShapesVisible(true);// lineandshaperenderer.setItemLabelsVisible(true); categoryplot.setRenderer(1, lineandshaperenderer); categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); LegendTitle legendtitle = new LegendTitle(categoryplot.getRenderer(0)); legendtitle.setMargin(new RectangleInsets(2D, 2D, 2D, 2D)); //legendtitle.setBorder(new BlockBorder()); LegendTitle legendtitle1 = new LegendTitle(categoryplot.getRenderer(1)); legendtitle1.setMargin(new RectangleInsets(2D, 2D, 2D, 2D)); //legendtitle1.setBorder(new BlockBorder()); BlockContainer blockcontainer = new BlockContainer(new BorderArrangement()); blockcontainer.add(legendtitle, RectangleEdge.LEFT); blockcontainer.add(legendtitle1, RectangleEdge.RIGHT); blockcontainer.add(new EmptyBlock(2000D, 0.0D)); CompositeTitle compositetitle = new CompositeTitle(blockcontainer); compositetitle.setPosition(RectangleEdge.BOTTOM); chart.addSubtitle(compositetitle); ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); //500是图片长度,300是图片高度 HttpSession session = request.getSession(); String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; jFreeChartPojo.setFilename(filename); jFreeChartPojo.setGraphURL(graphURL); return jFreeChartPojo;}}public String timeQuery() throws Exception {String qssj = request.getParameter("qssj");String jzsj = request.getParameter("jzsj");String cycle = request.getParameter("cycle");if (qssj.equals("")) {qssj = "1980-01-01 00:00:00";}if (jzsj.equals("")) {Date date = new Date();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");jzsj = formatter.format(date);}List<?> list = iAnalysisSpeedingCarBo.queryTime(qssj, jzsj, cycle);List<SpaceCarPojo> timeQuerySpeedingCar = new ArrayList<SpaceCarPojo>();DatePojo datePojo = new DatePojo();UtilMethod utilMethod = new UtilMethod();DefaultCategoryDataset dataset = new DefaultCategoryDataset();try {List<?> arylist = (ArrayList<?>) list.get(0);for (int i = 0; i < arylist.size(); i++) {String a = ((Object[]) arylist.get(i))[0].toString();String b = ((Object[]) arylist.get(i))[1].toString();SpaceCarPojo spaceCarPojo = new SpaceCarPojo();String q = null;String year = null;if (cycle.equals("year")) {a = a + "年";}if (cycle.equals("q")) {q = a.substring(5);year = a.substring(0, 4);if (q.equals("1")) {a = year + "年" + "春季(第一季)";}if (q.equals("2")) {a = year + "年" + "夏季(第二季)";}if (q.equals("3")) {a = year + "年" + "秋季(第三季)";}if (q.equals("4")) {a = year + "年" + "冬季(第四季)";}}if (cycle.equals("month")) {a = a + "月";}if (cycle.equals("iw")) {String years = a.substring(0, 4);String weeks = a.substring(5);a = years + "年第" + weeks + "周";}if (cycle.equals("day")) {a = a + "日";}datePojo.setDateBegin(qssj);datePojo.setDateEnd(jzsj);spaceCarPojo.setDate(utilMethod.trim(a));spaceCarPojo.setCount(utilMethod.trim(b));dataset.addValue(Integer.parseInt(utilMethod.trim(b)), "1",utilMethod.trim(a));timeQuerySpeedingCar.add(spaceCarPojo);}BarChart BarChart = new BarChart(); //这里调用了java类1JFreeChartPojo jFreeChartPojo = BarChart.barCharts("时间特征分析", "时间","车辆数", dataset);request.setAttribute("jFreeChart", jFreeChartPojo);request.setAttribute("datePojo", datePojo);// request.setAttribute("speedingCar", timeQuerySpeedingCar);} catch (Exception e) {e.printStackTrace();}return "xx";//返回stucts2配置}<table id="table1" style="display: none" width="100%"><tr><td width="10%"></td><td width="90%"><img id="img1" style="display: none"src="${jFreeChart.graphURL }" border="0"usemap="${jFreeChart.filename }"><br></td></tr><tr><td></td><td style="color: #DD0919;">${jFreeChart.description }</td></tr></table>//注:action url调用就不加以说明了..//直接上效果图