Java_大猫 发表于 2013-2-6 09:37:36

chart图之jfreechart

前不久了解了下有关chart图方面的,首先对于JAVA的来说,比较好的应该是jfreechart了。至于具体介绍,我就不对此做介绍了。这里我做了两个小的例子。分别是柱状图 具体就作为参考吧。网上关于jfreechart的资料很多。
代码如下:

       HttpSession session = request.getSession();response.setContentType("image/jpeg"); request.setCharacterEncoding("UTF-8");CreateDate creat = new CreateDate();CategoryDataset dateSet= creat.getDataSet();JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计", null, null, dateSet, PlotOrientation.VERTICAL,true,true,true);CategoryPlot plot = chart.getCategoryPlot();BarRenderer3D renderer = new BarRenderer3D();//设置图表的纵轴和横轴org.jfree.chart.axis.CategoryAxisCategoryAxis domainAxis= plot.getDomainAxis();domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10%      domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10      domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离(10像素)      domainAxis.setCategoryMargin(0.2);//横轴标签之间的距离20%      //设定柱子的属性         ValueAxis rangeAxis = plot.getRangeAxis();      rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)      renderer.setBaseOutlinePaint(Color.red);      renderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());//显示鼠标提示               renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());         renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));         renderer.setBaseItemLabelsVisible(true);                                                                renderer.setSeriesPaint(0, new Color(0, 255, 255));//计划柱子的颜色为青色      renderer.setSeriesOutlinePaint(0,Color.green);//边框为黑色      renderer.setSeriesPaint(1, new Color(0, 255, 0));//实报柱子的颜色为绿色      renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色      renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10%      //显示每个柱的数值,并修改该数值的字体属性            domainAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,15));      /*------设置X轴的标题文字------------*/      domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,15));                /*------设置Y轴坐标上的文字-----------*/      rangeAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,15));      /*------设置Y轴的标题文字------------*/      rangeAxis.setLabelFont(new Font("黑体",Font.PLAIN,15));                         renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());      renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗      renderer.setItemLabelPaint(Color.black);//字体为黑色      renderer.setItemLabelsVisible(true);                                 plot.setRenderer(renderer);//使用我们设计的效果      //设置纵横坐标的显示位置      plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//学校显示在下端(柱子竖直)或左侧(柱子水平)      plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //人数显示在下端(柱子水平)或左侧(柱子竖直)               TextTitle textTitle = chart.getTitle();      textTitle.setFont(new Font("黑体", Font.PLAIN, 20));          chart.setTitle(textTitle);      chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));         //设置热点提示                              Shape shape = new Rectangle(20, 10);      ChartEntity entity = new ChartEntity(shape);      StandardEntityCollection coll = new StandardEntityCollection();      coll.add(entity);      int width = 500;      int height = 300;                              ChartRenderingInfo info = new ChartRenderingInfo(coll);      PrintWriter pw = response.getWriter();      //写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息//      ChartUtilities.saveChartAsPNG(pw, chart, width, height, info);                   String filename =    ServletUtilities.saveChartAsPNG(chart, width , height, info, session);         ChartUtilities.writeImageMap(pw, filename, info, false);                        String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;            String strimg= ChartUtilities.getImageMap("map0", info);                request.setAttribute("strimg", strimg);      System.out.println(request.getAttribute("strimg"));      request.setAttribute("graphURL", graphURL);      RequestDispatcher dispatcher = request.getRequestDispatcher("/mobile2.jsp");      dispatcher .forward(request, response);
当然这里你需要有个xml配置 也就是上面设计的 graphURL部分
配置如下
<servlet>    <servlet-name>DisplayChart</servlet-name>    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class></servlet><servlet-mapping>    <servlet-name>DisplayChart</servlet-name>    <url-pattern>/servlet/DisplayChart</url-pattern></servlet-mapping>
JSP页面需
<%=request.getAttribute("strimg") %>// 页面必须要有这个才能实现当//你鼠标放到图上显示信息,也就是所谓的热点提示   <p><img src="${graphURL }" width="500" height="300" border="0" usemap="#map0"> </p>
页: [1]
查看完整版本: chart图之jfreechart