`
mimang2007110
  • 浏览: 237371 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JFreeChart(java画图)教程

阅读更多
JFreeChart配置安装
    1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar
       是例子程序(该部分留给大家自己去研究)
    2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、
       lib\gnujaxp.jar
    3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入
       如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:
       把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:
                <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>
               至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类
       结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。如果
       是中文显示的时候可能依据观感需要改变源码的字体,不过我个人觉得这个版本比以前版本要好一些。

JFreeChart开发

package dao;

import java.awt.Color;
import java.awt.Font;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
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.PiePlot3D;
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.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.TextAnchor;

 

public class FreeChartCommon {

 static String graphURL1 = null;

 /**
  * 饼状图
  */
 public static JFreeChart generatePieChart(String xml) {
  PieDataset dataset = getDataSet(xml);
   JFreeChart chart = ChartFactory.createPieChart3D("纳税考评信息饼状图", // 图表标题
    dataset, // 数据集
    true, // 是否显示图例
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  chart.setBackgroundPaint(Color.pink);
  chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));
  chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));
  PiePlot3D plot = (PiePlot3D) chart.getPlot();

  plot.setLabelFont(new Font("SansSerif",Font.BOLD,12));

  plot.setCircular(true);

  plot.setLabelGap(0.01D);//间距
  //图片中显示百分比:默认方式 
        //设置无数据时的信息 
  plot.setNoDataMessage("无对应的数据,请重新查询。"); 

        //设置无数据时的信息显示颜色 
  plot.setNoDataMessagePaint(Color.red); 
        //图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 
  plot.setLabelGenerator(new StandardPieSectionLabelGenerator( 
  "{0}={1}({2})", NumberFormat.getNumberInstance(), 
  new DecimalFormat("0.00%"))); 
         //图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 
  plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( 
  "{0}={1}({2})")); 
  return chart;
 }

 /**
  * 柱状图
  */
 public static JFreeChart generateBarChart(String xml) {
  CategoryDataset dataset = getDataSet2(xml);
  JFreeChart chart = ChartFactory.createBarChart3D("纳税考评信息柱状图", // 图表标题
    "", // 目录轴的显示标签
    "", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  //显示每个柱的数值,并修改该数值的字体属性
  chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));
        chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));
        
        CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象

        CategoryAxis domainAxis=plot.getDomainAxis();
         //水平底部列表
         domainAxis.setLabelFont(new Font("宋体",Font.BOLD,14));
         //水平底部标题
         domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
         //垂直标题
         ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
         rangeAxis.setLabelFont(new Font("宋体",Font.BOLD,15));
         
  CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
  categoryplot.setNoDataMessage("无对应的数据,请重新查询。");
     categoryplot.getRenderer().setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
     categoryplot.getRenderer().setItemLabelsVisible(true);
     categoryplot.getRenderer().setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,
                    TextAnchor.BOTTOM_LEFT));
     BarRenderer3D renderer  =   new  BarRenderer3D();
     renderer.setItemLabelGenerator( new  StandardCategoryItemLabelGenerator());
        renderer.setItemLabelsVisible( true );
        return chart;
 }

 /**
  * 折线图
  */
 public static JFreeChart generateLineChart(String xml) {
  

  CategoryDataset dataset = getDataSet3(xml);
  JFreeChart chart = ChartFactory.createLineChart("纳税考评折线图", // 图表标题
    "", // 目录轴的显示标签
    "", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );

  /*------------配置图表属性--------------*/
  // 1,设置整个图表背景颜色
  chart.setBackgroundPaint(Color.pink);

  /*------------设定Plot参数-------------*/
  CategoryPlot plot = chart.getCategoryPlot();
  // 2,设置详细图表的显示细节部分的背景颜色
  // plot.setBackgroundPaint(Color.PINK);
  // 3,设置垂直网格线颜色
  plot.setDomainGridlinePaint(Color.black);
  // 4,设置是否显示垂直网格线
  plot.setDomainGridlinesVisible(true);
  // 5,设置水平网格线颜色
  plot.setRangeGridlinePaint(Color.blue);
  // 6,设置是否显示水平网格线
  plot.setRangeGridlinesVisible(true);
  
  /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
  //显示每个柱的数值,并修改该数值的字体属性
  chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
    
    CategoryAxis domainAxis = plot.getDomainAxis();   
    /*------设置X轴坐标上的文字-----------*/ 
    domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 11));   
    /*------设置X轴的标题文字------------*/ 
    domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   
    NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();   
    /*------设置Y轴坐标上的文字-----------*/ 
    numberaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));   
     
    /*------设置Y轴的标题文字------------*/ 
    numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
    numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    numberaxis.setAutoRangeIncludesZero(true);
    numberaxis.setUpperMargin(0.20);
    numberaxis.setLabelAngle(Math.PI / 2.0);
       chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));
       
//   获得renderer 注意这里是下嗍造型到lineandshaperenderer!! 
  LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)plot.getRenderer(); 
//
  lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见 
  lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见 

   //显示折点数据 
   lineandshaperenderer.setBaseItemLabelGenerator(new 
   StandardCategoryItemLabelGenerator()); 
   lineandshaperenderer.setBaseItemLabelsVisible(true); 
   
  return chart;
 }

 /**
  * 获取一个饼状图的简单数据集对象
  * 
  * @return
  */
 private static PieDataset getDataSet(String xml) {
  DefaultPieDataset dataset = new DefaultPieDataset();
//  try {
//   xml = "<ROOT>" + xml + "</ROOT>";
//   Document document = DocumentHelper.parseText(xml);
//   // 读取ITEM
//   List list = document.selectNodes("//ITEM");
//   // 获取NODE细节
//   Iterator it = list.iterator();
//   
//   while (it.hasNext()) {
//    Node node = (Node) it.next();
//    /**
//     * 
//     */
//    dataset.setValue(Tools.nullToSpace(node.valueOf("HZFS")), Double.parseDouble(node.valueOf("XMMC")));
//   
//   }
//
//  } catch (Exception e) {
//   
//    e.printStackTrace();
//   
//  }
    dataset.setValue("管理人员啊", 10.02D);

    dataset.setValue("市场人员啊", 20.23D);

    dataset.setValue("开发人员啊", 60.02D);

    dataset.setValue("OEM人员啊", 10.02D);

    dataset.setValue("其他人员啊", 5.11D);
    
    dataset.setValue("其他人员啊3", 5.11D);
  return dataset;
 }

 /**
  * 获取一个柱状图数据集对象
  * 
  * @return
  */
 private static CategoryDataset getDataSet2(String xml) {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//  try {
//   xml = "<ROOT>" + xml + "</ROOT>";
//   Document document = DocumentHelper.parseText(xml);
//   // 读取ITEM
//   List list = document.selectNodes("//ITEM");
//   // 获取NODE细节
//   Iterator it = list.iterator();
//   while (it.hasNext()) {
//    Node node = (Node) it.next();
//    dataset.setValue(Double.parseDouble(node.valueOf("XMMC")), Tools
//      .nullToSpace(node.valueOf("HZFS")), Tools.nullToSpace(node
//      .valueOf("HZFS")));
//   }
//
//  } catch (Exception e) {
//   
//    e.printStackTrace();
//   
//  }
 //  各曲线名称
    String series1 = "计划";
    String series2 = "营销";
    String series3 = "开发"; 

    //    横轴名称(列名称)
    String type1 = "管理人员";
    String type2 = "市场人员";
    String type3 = "开发人员"; 
    
    dataset.setValue(10.02D,series1,type1);
    dataset.setValue(10.02D,series1,type2);
    dataset.setValue(10.02D,series1,type3);

    dataset.setValue(40.02D,series2,type1);
    dataset.setValue(40.02D,series2,type2);
    dataset.setValue(80.02D,series2,type3);
    
    dataset.setValue(50.02D,series3,type1);
    dataset.setValue(50.02D,series3,type2);
    dataset.setValue(60.02D,series3,type3);

  return dataset;
 }

 /**
  * 获取一个折线图数据集对象
  * 
  * @return
  */
 public static CategoryDataset getDataSet3(String xml) {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//  try {
//   xml = "<ROOT>" + xml + "</ROOT>";
//   Document document = DocumentHelper.parseText(xml);
//   // 读取ITEM
//   List list = document.selectNodes("//ITEM");
//   // 获取NODE细节
//   Iterator it = list.iterator();
//
//   while (it.hasNext()) {
//    Node node = (Node) it.next();
//    dataset.setValue(Double.parseDouble(node.valueOf("ZF")), Tools
//      .nullToSpace(node.valueOf("XMMC")), Tools.nullToSpace(node
//      .valueOf("NF")));
//   }
//  } catch (Exception e) {
//   
//    e.printStackTrace();
//
//  }
 //  各曲线名称
    String series1 = "管理人员";
    String series2 = "市场人员";
    String series3 = "开发人员"; 

    //    横轴名称(列名称)
    String type1 = "计划";
    String type2 = "营销";
    String type3 = "洗衣机"; 

    dataset.setValue(0.0, series1, type1);
    dataset.setValue(4.2, series1, type2);
    dataset.setValue(3.9, series1, type3); 

    dataset.setValue(1.0, series2, type1);
    dataset.setValue(5.2, series2, type2);
    dataset.setValue(7.9, series2, type3); 

    dataset.setValue(2.0, series3, type1);
    dataset.setValue(9.2, series3, type2);
    dataset.setValue(8.9, series3, type3); 
    
  return dataset;
 }

 
    /**
     * 
     * @param request
     * @param session
     * @param out
     * @param xml
     * @param x 1表示折线图,2表示饼图,3表示柱状图
     * @return
     */
 public static String getGraphUrl(HttpServletRequest request, HttpSession session,
   PrintWriter out,String xml,int x) {
  JFreeChart chart=null;
  if(x==1){
      chart=generateLineChart(xml);
  }
  if(x==2){
   chart=generatePieChart(xml);
  }
  if(x==3){
   chart=generateBarChart(xml);
  }
   
  StandardEntityCollection sec = new StandardEntityCollection();
  ChartRenderingInfo info = new ChartRenderingInfo(sec);
  try {
   String filename = ServletUtilities.saveChartAsJPEG(chart, 500, 300,
     info, null);
 
   graphURL1 = request.getContextPath()
     + "/servlet/DisplayChart?filename=" + filename;
  } catch (Exception e) {
   System.out.println("error happens---" + e.toString());

  }
  return graphURL1;
 }
}

package navigate;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import common.Tools;

import dao.FreeChartCommon;

public class JfreeChar_Test extends HttpServlet {

 /**
  * Constructor of the object.
  */
 public JfreeChar_Test() {
  super();
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  response.setContentType("text/html;charset=GBK");
  response.setHeader("Cache-Control", "no-cache");
  PrintWriter out = response.getWriter();
  String method = request.getParameter("method");
  String xml=request.getParameter("xml");
  if (method == null) {
   method = "";
  }
  if (xml == null) {
   xml = "";
  }
  String filename="";
  if(method.equals("line"))
  {
   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),1);
   out.print(filename);
  }
  if(method.equals("pie"))
  {
   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),2);
   out.print(filename);
  }
  if(method.equals("bar"))
  {
   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),3);
   out.print(filename);
  }
  }

}

页面:

<img id="imagetu" src="<%=request.getContextPath()%>/servlet/JfreeChar_Test?method=pie">

 

这也是我从网上摘抄的,供大家参阅。

 

分享到:
评论

相关推荐

    JFreeChart画图

    **JFreeChart** 是一个Java库,用于生成高质量的图表,包括曲线图、柱状图、折线图、饼图以及甘特图等。它在Java应用和Web应用中广泛使用,尤其是对于数据可视化和报告生成。JFreeChart库不仅支持静态图表,还能够...

    JFreeChart画图实例

    JFreeChart是一款强大的Java图表库,它为开发者提供了在Java应用程序和Web应用中创建各种复杂图表的能力。这个实例是关于如何使用JFreeChart来绘制饼图、柱状图和折线图,并且这些图表能够在Web环境中展示。在这个...

    jfreechart画图文档

    - **在线教程**:网上有许多关于JFreeChart的教程和博客文章,可以帮助开发者快速上手。 总之,JFreeChart是Java开发者进行数据可视化的得力工具,尽管文档是英文的,但对于有一定基础的开发者来说,这不应成为...

    java利用jfreechart绘制excel参考.pdf

    Java 利用 JFreeChart 绘制 Excel 参考 JFreeChart 是一个流行的 Java 图表库,能够生成各种类型的图表,包括折线图、柱状图、饼状图等。下面是使用 JFreeChart 库绘制 Excel 图表的相关知识点: 导包 为了使用 ...

    jfreechart画图

    JFreeChart是一款强大的Java图形库,它为开发者提供了一种简单的方式来创建各种复杂的图表,包括折线图、柱状图、饼图、散点图、甘特图等。在Java中,利用JFreeChart可以方便地将数据可视化,这对于数据分析、报告...

    java 画图jfreechart

    java 画图jfreechart.JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar ...

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 可以直接下载解压后,import到myeclipse里面,运行: ...

    WEB画图(java)

    对于常见的统计图表和数据可视化,有许多Java和JavaScript库可以使用,如Java的JFreeChart、JavaFX的ControlsFX,以及JavaScript的D3.js、Chart.js等。这些库提供了丰富的预定义图表类型和自定义选项,可以帮助...

    java web画图jar包

    Java Web画图jar包主要指的是用于在Web应用中生成图形的库,如JFreeChart,这是一个非常流行的开源Java库,用于创建高质量的图表。本文将详细介绍JFreeChart库及其在Java Web开发中的应用。 JFreeChart是Java平台上...

    JFreeChart画折线实例

    在Java编程环境中,JFreeChart是一个非常流行的开源库,它为开发者提供了丰富的图表绘制功能,包括折线图、饼图、柱状图等。在这个"JFreeChart画折线实例"中,我们将深入探讨如何利用JFreeChart库来创建折线图,并将...

    struts2+jfreechart

    Struts2和JFreeChart是两个在Java Web开发中广泛使用的开源库。Struts2是一个强大的MVC(Model-View-Controller)框架,用于构建可维护性和可扩展性极高的Web应用程序,而JFreeChart则是一个用于生成高质量图表的...

    JFreeChart

    **JFreeChart** 是一个强大的Java图形库,用于在应用程序、applets、servlets以及JSP中生成各种类型的图表。这个库的核心在于其模块化的结构,允许开发者根据需要选择和定制图表类型。以下是JFreeChart的主要知识点...

    jfree包jcommon、jfreechart

    Java web上画图需要用到的。JFreeChart配置安装 1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar 是例子程序(该部分留给大家自己去研究) 2、为了配置成功...

    Java_flash_Chart

    总结起来,"Java_flash_Chart"项目可能是一个利用Java结合图表库,如JFreeChart,创建动态或静态图表的系统,并且具备报表打印功能。开发者通过读取数据源,利用Java的图形和打印API,实现了数据的可视化和报表的...

    jfreechart-1.0.jar

    超好用java第三方包,包含各种画图方法,容易使用

    jfreechart

    JFreeChart是一款强大的Java图形库,专为开发者设计,用于创建高质量的图表。这款开源工具包使得在Java应用程序中绘制各种复杂图表变得轻而易举,包括柱状图、饼图、线图、散点图、面积图、甘特图以及时间序列图等。...

    java根据动态模板生成pdf(包含柱状图)所需jar包

    java根据动态模板生成pdf(包含柱状图)所需jar包 iText+FreeMarker+JFreeChart生成可动态配置的PDF文档。 iText有很强大的PDF处理能力...JFreeChart有这方便的画图API,能画出简单的折线、柱状和饼图,基本能满足需要

    20201012JFreeChart生成饼图和环图技术.zip

    通过学习这个教程,你可以熟练地使用JFreeChart为你的Java应用增添丰富的可视化元素,使数据的呈现更加直观和生动。 总结来说,JFreeChart是Java编程中生成图表的强大工具,提供了丰富的功能和灵活性。无论是简单的...

    JFreeChart用户开发指南1.0.6(中文)

    JFreeChart 是一款面向 Java 开发者的免费图形开发类库,主要用于在各种 Java 应用程序(如 application、applets、servlets 和 JSP)中生成图表。它是一款完全开源的项目,遵循 GNU 通用公共许可证 (GPL),确保用户...

Global site tag (gtag.js) - Google Analytics