读书人

JFreeChart(java画图)课程

发布时间: 2012-12-23 11:28:15 作者: rapoo

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">

?

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

?

读书人网 >编程

热点推荐