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

JFreeChart(java画图)教程

阅读更多
1.JFreeChart配置安装  
2.    1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar  
3.       是例子程序(该部分留给大家自己去研究)  
4.    2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、  
5.       lib\gnujaxp.jar  
6.    3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入  
7.       如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:  
8.       把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:  
9.                <servlet>  
10.                    <servlet-name>DisplayChart</servlet-name>  
11.                    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>  
12.                </servlet>  
13.                <servlet-mapping>  
14.                    <servlet-name>DisplayChart</servlet-name>  
15.                    <url-pattern>/servlet/DisplayChart</url-pattern>  
16.                </servlet-mapping>  
17.               至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类  
18.       结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。如果  
19.       是中文显示的时候可能依据观感需要改变源码的字体,不过我个人觉得这个版本比以前版本要好一些。  
20. 
21.JFreeChart开发  
22. 
23.package dao;  
24. 
25.import java.awt.Color;  
26.import java.awt.Font;  
27.import java.io.PrintWriter;  
28.import java.text.DecimalFormat;  
29.import java.text.NumberFormat;  
30. 
31.import javax.servlet.http.HttpServletRequest;  
32.import javax.servlet.http.HttpSession;  
33. 
34.import org.jfree.chart.ChartFactory;  
35.import org.jfree.chart.ChartRenderingInfo;  
36.import org.jfree.chart.JFreeChart;  
37.import org.jfree.chart.axis.CategoryAxis;  
38.import org.jfree.chart.axis.NumberAxis;  
39.import org.jfree.chart.axis.ValueAxis;  
40.import org.jfree.chart.entity.StandardEntityCollection;  
41.import org.jfree.chart.labels.ItemLabelAnchor;  
42.import org.jfree.chart.labels.ItemLabelPosition;  
43.import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;  
44.import org.jfree.chart.labels.StandardPieSectionLabelGenerator;  
45.import org.jfree.chart.plot.CategoryPlot;  
46.import org.jfree.chart.plot.PiePlot3D;  
47.import org.jfree.chart.plot.PlotOrientation;  
48.import org.jfree.chart.renderer.category.BarRenderer3D;  
49.import org.jfree.chart.renderer.category.LineAndShapeRenderer;  
50.import org.jfree.chart.servlet.ServletUtilities;  
51.import org.jfree.data.category.CategoryDataset;  
52.import org.jfree.data.category.DefaultCategoryDataset;  
53.import org.jfree.data.general.DefaultPieDataset;  
54.import org.jfree.data.general.PieDataset;  
55.import org.jfree.ui.TextAnchor;  
56. 
57.   
58. 
59.public class FreeChartCommon {  
60. 
61. static String graphURL1 = null;  
62. 
63. /** 
64.  * 饼状图 
65.  */ 
66. public static JFreeChart generatePieChart(String xml) {  
67.  PieDataset dataset = getDataSet(xml);  
68.   JFreeChart chart = ChartFactory.createPieChart3D("纳税考评信息饼状图", // 图表标题  
69.    dataset, // 数据集  
70.    true, // 是否显示图例  
71.    false, // 是否生成工具  
72.    false // 是否生成URL链接  
73.    );  
74.  chart.setBackgroundPaint(Color.pink);  
75.  chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));  
76.  chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));  
77.  PiePlot3D plot = (PiePlot3D) chart.getPlot();  
78. 
79.  plot.setLabelFont(new Font("SansSerif",Font.BOLD,12));  
80. 
81.  plot.setCircular(true);  
82. 
83.  plot.setLabelGap(0.01D);//间距  
84.  //图片中显示百分比:默认方式   
85.        //设置无数据时的信息   
86.  plot.setNoDataMessage("无对应的数据,请重新查询。");   
87. 
88.        //设置无数据时的信息显示颜色   
89.  plot.setNoDataMessagePaint(Color.red);   
90.        //图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位   
91.  plot.setLabelGenerator(new StandardPieSectionLabelGenerator(   
92.  "{0}={1}({2})", NumberFormat.getNumberInstance(),   
93.  new DecimalFormat("0.00%")));   
94.         //图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例   
95.  plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(   
96.  "{0}={1}({2})"));   
97.  return chart;  
98. }  
99. 
100. /** 
101.  * 柱状图 
102.  */ 
103. public static JFreeChart generateBarChart(String xml) {  
104.  CategoryDataset dataset = getDataSet2(xml);  
105.  JFreeChart chart = ChartFactory.createBarChart3D("纳税考评信息柱状图", // 图表标题  
106.    "", // 目录轴的显示标签  
107.    "", // 数值轴的显示标签  
108.    dataset, // 数据集  
109.    PlotOrientation.VERTICAL, // 图表方向:水平、垂直  
110.    true, // 是否显示图例(对于简单的柱状图必须是false)  
111.    false, // 是否生成工具  
112.    false // 是否生成URL链接  
113.    );  
114.  //显示每个柱的数值,并修改该数值的字体属性  
115.  chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));  
116.        chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));  
117.          
118.        CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象  
119. 
120.        CategoryAxis domainAxis=plot.getDomainAxis();  
121.         //水平底部列表  
122.         domainAxis.setLabelFont(new Font("宋体",Font.BOLD,14));  
123.         //水平底部标题  
124.         domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  
125.         //垂直标题  
126.         ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状  
127.         rangeAxis.setLabelFont(new Font("宋体",Font.BOLD,15));  
128.           
129.  CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();  
130.  categoryplot.setNoDataMessage("无对应的数据,请重新查询。");  
131.     categoryplot.getRenderer().setItemLabelGenerator(new StandardCategoryItemLabelGenerator());  
132.     categoryplot.getRenderer().setItemLabelsVisible(true);  
133.     categoryplot.getRenderer().setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,  
134.                    TextAnchor.BOTTOM_LEFT));  
135.     BarRenderer3D renderer  =   new  BarRenderer3D();  
136.     renderer.setItemLabelGenerator( new  StandardCategoryItemLabelGenerator());  
137.        renderer.setItemLabelsVisible( true );  
138.        return chart;  
139. }  
140. 
141. /** 
142.  * 折线图 
143.  */ 
144. public static JFreeChart generateLineChart(String xml) {  
145.    
146. 
147.  CategoryDataset dataset = getDataSet3(xml);  
148.  JFreeChart chart = ChartFactory.createLineChart("纳税考评折线图", // 图表标题  
149.    "", // 目录轴的显示标签  
150.    "", // 数值轴的显示标签  
151.    dataset, // 数据集  
152.    PlotOrientation.VERTICAL, // 图表方向:水平、垂直  
153.    true, // 是否显示图例(对于简单的柱状图必须是false)  
154.    false, // 是否生成工具  
155.    false // 是否生成URL链接  
156.    );  
157. 
158.  /*------------配置图表属性--------------*/ 
159.  // 1,设置整个图表背景颜色  
160.  chart.setBackgroundPaint(Color.pink);  
161. 
162.  /*------------设定Plot参数-------------*/ 
163.  CategoryPlot plot = chart.getCategoryPlot();  
164.  // 2,设置详细图表的显示细节部分的背景颜色  
165.  // plot.setBackgroundPaint(Color.PINK);  
166.  // 3,设置垂直网格线颜色  
167.  plot.setDomainGridlinePaint(Color.black);  
168.  // 4,设置是否显示垂直网格线  
169.  plot.setDomainGridlinesVisible(true);  
170.  // 5,设置水平网格线颜色  
171.  plot.setRangeGridlinePaint(Color.blue);  
172.  // 6,设置是否显示水平网格线  
173.  plot.setRangeGridlinesVisible(true);  
174.    
175.  /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/ 
176.  //显示每个柱的数值,并修改该数值的字体属性  
177.  chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));  
178.    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));  
179.      
180.    CategoryAxis domainAxis = plot.getDomainAxis();     
181.    /*------设置X轴坐标上的文字-----------*/   
182.    domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 11));     
183.    /*------设置X轴的标题文字------------*/   
184.    domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));     
185.    NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();     
186.    /*------设置Y轴坐标上的文字-----------*/   
187.    numberaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));     
188.       
189.    /*------设置Y轴的标题文字------------*/   
190.    numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));  
191.    numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  
192.    numberaxis.setAutoRangeIncludesZero(true);  
193.    numberaxis.setUpperMargin(0.20);  
194.    numberaxis.setLabelAngle(Math.PI / 2.0);  
195.       chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,10));  
196.         
197.//   获得renderer 注意这里是下嗍造型到lineandshaperenderer!!   
198.  LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)plot.getRenderer();   
199.//  
200.  lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见   
201.  lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见   
202. 
203.   //显示折点数据   
204.   lineandshaperenderer.setBaseItemLabelGenerator(new   
205.   StandardCategoryItemLabelGenerator());   
206.   lineandshaperenderer.setBaseItemLabelsVisible(true);   
207.     
208.  return chart;  
209. }  
210. 
211. /** 
212.  * 获取一个饼状图的简单数据集对象 
213.  *  
214.  * @return 
215.  */ 
216. private static PieDataset getDataSet(String xml) {  
217.  DefaultPieDataset dataset = new DefaultPieDataset();  
218.//  try {  
219.//   xml = "<ROOT>" + xml + "</ROOT>";  
220.//   Document document = DocumentHelper.parseText(xml);  
221.//   // 读取ITEM  
222.//   List list = document.selectNodes("//ITEM");  
223.//   // 获取NODE细节  
224.//   Iterator it = list.iterator();  
225.//     
226.//   while (it.hasNext()) {  
227.//    Node node = (Node) it.next();  
228.//    /**  
229.//     *   
230.//     */  
231.//    dataset.setValue(Tools.nullToSpace(node.valueOf("HZFS")), Double.parseDouble(node.valueOf("XMMC")));  
232.//     
233.//   }  
234.//  
235.//  } catch (Exception e) {  
236.//     
237.//    e.printStackTrace();  
238.//     
239.//  }  
240.    dataset.setValue("管理人员啊", 10.02D);  
241. 
242.    dataset.setValue("市场人员啊", 20.23D);  
243. 
244.    dataset.setValue("开发人员啊", 60.02D);  
245. 
246.    dataset.setValue("OEM人员啊", 10.02D);  
247. 
248.    dataset.setValue("其他人员啊", 5.11D);  
249.      
250.    dataset.setValue("其他人员啊3", 5.11D);  
251.  return dataset;  
252. }  
253. 
254. /** 
255.  * 获取一个柱状图数据集对象 
256.  *  
257.  * @return 
258.  */ 
259. private static CategoryDataset getDataSet2(String xml) {  
260.  DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
261.//  try {  
262.//   xml = "<ROOT>" + xml + "</ROOT>";  
263.//   Document document = DocumentHelper.parseText(xml);  
264.//   // 读取ITEM  
265.//   List list = document.selectNodes("//ITEM");  
266.//   // 获取NODE细节  
267.//   Iterator it = list.iterator();  
268.//   while (it.hasNext()) {  
269.//    Node node = (Node) it.next();  
270.//    dataset.setValue(Double.parseDouble(node.valueOf("XMMC")), Tools  
271.//      .nullToSpace(node.valueOf("HZFS")), Tools.nullToSpace(node  
272.//      .valueOf("HZFS")));  
273.//   }  
274.//  
275.//  } catch (Exception e) {  
276.//     
277.//    e.printStackTrace();  
278.//     
279.//  }  
280. //  各曲线名称  
281.    String series1 = "计划";  
282.    String series2 = "营销";  
283.    String series3 = "开发";   
284. 
285.    //    横轴名称(列名称)  
286.    String type1 = "管理人员";  
287.    String type2 = "市场人员";  
288.    String type3 = "开发人员";   
289.      
290.    dataset.setValue(10.02D,series1,type1);  
291.    dataset.setValue(10.02D,series1,type2);  
292.    dataset.setValue(10.02D,series1,type3);  
293. 
294.    dataset.setValue(40.02D,series2,type1);  
295.    dataset.setValue(40.02D,series2,type2);  
296.    dataset.setValue(80.02D,series2,type3);  
297.      
298.    dataset.setValue(50.02D,series3,type1);  
299.    dataset.setValue(50.02D,series3,type2);  
300.    dataset.setValue(60.02D,series3,type3);  
301. 
302.  return dataset;  
303. }  
304. 
305. /** 
306.  * 获取一个折线图数据集对象 
307.  *  
308.  * @return 
309.  */ 
310. public static CategoryDataset getDataSet3(String xml) {  
311.  DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
312.//  try {  
313.//   xml = "<ROOT>" + xml + "</ROOT>";  
314.//   Document document = DocumentHelper.parseText(xml);  
315.//   // 读取ITEM  
316.//   List list = document.selectNodes("//ITEM");  
317.//   // 获取NODE细节  
318.//   Iterator it = list.iterator();  
319.//  
320.//   while (it.hasNext()) {  
321.//    Node node = (Node) it.next();  
322.//    dataset.setValue(Double.parseDouble(node.valueOf("ZF")), Tools  
323.//      .nullToSpace(node.valueOf("XMMC")), Tools.nullToSpace(node  
324.//      .valueOf("NF")));  
325.//   }  
326.//  } catch (Exception e) {  
327.//     
328.//    e.printStackTrace();  
329.//  
330.//  }  
331. //  各曲线名称  
332.    String series1 = "管理人员";  
333.    String series2 = "市场人员";  
334.    String series3 = "开发人员";   
335. 
336.    //    横轴名称(列名称)  
337.    String type1 = "计划";  
338.    String type2 = "营销";  
339.    String type3 = "洗衣机";   
340. 
341.    dataset.setValue(0.0, series1, type1);  
342.    dataset.setValue(4.2, series1, type2);  
343.    dataset.setValue(3.9, series1, type3);   
344. 
345.    dataset.setValue(1.0, series2, type1);  
346.    dataset.setValue(5.2, series2, type2);  
347.    dataset.setValue(7.9, series2, type3);   
348. 
349.    dataset.setValue(2.0, series3, type1);  
350.    dataset.setValue(9.2, series3, type2);  
351.    dataset.setValue(8.9, series3, type3);   
352.      
353.  return dataset;  
354. }  
355. 
356.   
357.    /** 
358.     *  
359.     * @param request 
360.     * @param session 
361.     * @param out 
362.     * @param xml 
363.     * @param x 1表示折线图,2表示饼图,3表示柱状图 
364.     * @return 
365.     */ 
366. public static String getGraphUrl(HttpServletRequest request, HttpSession session,  
367.   PrintWriter out,String xml,int x) {  
368.  JFreeChart chart=null;  
369.  if(x==1){  
370.      chart=generateLineChart(xml);  
371.  }  
372.  if(x==2){  
373.   chart=generatePieChart(xml);  
374.  }  
375.  if(x==3){  
376.   chart=generateBarChart(xml);  
377.  }  
378.     
379.  StandardEntityCollection sec = new StandardEntityCollection();  
380.  ChartRenderingInfo info = new ChartRenderingInfo(sec);  
381.  try {  
382.   String filename = ServletUtilities.saveChartAsJPEG(chart, 500, 300,  
383.     info, null);  
384.   
385.   graphURL1 = request.getContextPath()  
386.     + "/servlet/DisplayChart?filename=" + filename;  
387.  } catch (Exception e) {  
388.   System.out.println("error happens---" + e.toString());  
389. 
390.  }  
391.  return graphURL1;  
392. }  
393.}  
394. 
395.package navigate;  
396. 
397.import java.io.IOException;  
398.import java.io.PrintWriter;  
399. 
400.import javax.servlet.ServletException;  
401.import javax.servlet.http.HttpServlet;  
402.import javax.servlet.http.HttpServletRequest;  
403.import javax.servlet.http.HttpServletResponse;  
404. 
405.import common.Tools;  
406. 
407.import dao.FreeChartCommon;  
408. 
409.public class JfreeChar_Test extends HttpServlet {  
410. 
411. /** 
412.  * Constructor of the object. 
413.  */ 
414. public JfreeChar_Test() {  
415.  super();  
416. }  
417. 
418. /** 
419.  * Destruction of the servlet. <br> 
420.  */ 
421. public void destroy() {  
422.  super.destroy(); // Just puts "destroy" string in log  
423.  // Put your code here  
424. }  
425. 
426. public void doGet(HttpServletRequest request, HttpServletResponse response)  
427. throws ServletException, IOException {  
428.  response.setContentType("text/html;charset=GBK");  
429.  response.setHeader("Cache-Control", "no-cache");  
430.  PrintWriter out = response.getWriter();  
431.  String method = request.getParameter("method");  
432.  String xml=request.getParameter("xml");  
433.  if (method == null) {  
434.   method = "";  
435.  }  
436.  if (xml == null) {  
437.   xml = "";  
438.  }  
439.  String filename="";  
440.  if(method.equals("line"))  
441.  {  
442.   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),1);  
443.   out.print(filename);  
444.  }  
445.  if(method.equals("pie"))  
446.  {  
447.   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),2);  
448.   out.print(filename);  
449.  }  
450.  if(method.equals("bar"))  
451.  {  
452.   filename=FreeChartCommon.getGraphUrl(request,request.getSession(),out,Tools.editStr(xml),3);  
453.   out.print(filename);  
454.  }  
455.  }  
456. 
457.}  
458. 
459.页面:  
460. 
461.<img id="imagetu" src="<%=request.getContextPath()%>/servlet/JfreeChar_Test?method=pie"> 
分享到:
评论

相关推荐

    JFreeChart画图

    用JFreeChart设计各种基于java的图形界面,如曲线图,柱状图,折线图,甘特图等,并且在JSP页面显示

    jfreechart画图

    在java中,可以使用jfreechart来画图

    java 画图jfreechart

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

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

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

    JfreeChart1.5.0

    免费开源的java jfreechart1.5.0画图软件包,来源互联网

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    Java 最优秀的画图工具,包括Jar文件和各种例子文件!共享!多支持!

    jfreeChart

    非常不错的java画图开源框架书籍,全面介绍jfreeChart最新技术!

    JFreeChart画折线实例

    画折线图和饼图的实例。并存为本地文件。 用JFreeChart实现。

    jfreechart-1.0.jar

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

    jfreechart

    方便画图,容易上手!jfreechart 是一个java的可以调用的第三方工具包,它使得画柱状统计图,饼状统计图等等变得简单!

    java实现向word文档中插入柱状图,并更改颜色

    java实现向word文档中插入柱状图,并更改颜色。 将docx转化为xml文件在进行操作

    jfree包jcommon、jfreechart

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

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

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

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

    JFreeChart是一款免费的java图形开发类库。主要用来在application/ applets/ servlets/ jsp/上生成各种图表。JFreeChart是完全开源,并且严格遵循GNU的通用公共许可证,力保JFreeChart用户对源代码的自由修改与使用...

    JFreeChart

    整理JFreeChart资料,此程序是多年前曾经整理过资料,学习程序人或许有所帮助。JAVA 之前开源世界。

    jfree包 包括实例 jar-hamcrest,jcommon,jfreechart,jfreesvg,orsoncharts,swtgraphics2d

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

    JFreeChart个人总结

    个人总结:里面附有源代码,并且具体给出了每一种方法对应的运行效果图。总结的图表有柱状图,折线图,还有饼图。其中还含有图表中文处理的部分代码。

    JFreeChart外包

    Java的画图工具外包,可以画出各种图形。

    jfreechart-1.0.19

    专门设计的Java平台,允许各种各样的交互式和非交互式图表创建。  该应用程序还为您提供各种图表的例子,可以很容易地导出到PDF,帆布或以最小的努力SVG格式。可以生成各种类型的图形,直接使用。

Global site tag (gtag.js) - Google Analytics