通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建饼图的应用实例(Eclipse开发工具版本)
- 格式:pdf
- 大小:184.31 KB
- 文档页数:7
1.1通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建柱状图的应用实例(Eclipse开发工具版本)1.1.1创建柱状图的应用实例1、创建一个简单数据源(dataset)对象的代码示例柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset接口。
获取一个演示用的简单数据集对象,也可以采用下面的代码来产生CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);其中:rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充柱状图所要的实际数据(来自于数据库)。
下面为代码示例:private static CategoryDataset getDataSet(){DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "中科院计算所培训中心", "Java软件工程师班");dataset.addValue(200, "中科院计算所培训中心", "软件工程师班");dataset.addValue(300, "中科院计算所培训中心", "平面工程师班");dataset.addValue(400, "中科院计算所培训中心", "网络工程师班");dataset.addValue(500, "中科院计算所培训中心", "动漫工程师班");return dataset;}2、创建组合数据集对象的代码示例private static CategoryDataset getDataSet2() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "中科院计算所培训中心", "Java软件工程师班");dataset.addValue(120, "沈阳培训中心", "Java软件工程师班");dataset.addValue(130, "长沙培训中心", "Java软件工程师班");dataset.addValue(220, "中科院计算所培训中心", "软件工程师班");dataset.addValue(250, "沈阳培训中心", "软件工程师班");dataset.addValue(280, "长沙培训中心", "软件工程师班");dataset.addValue(320, "中科院计算所培训中心", "平面工程师班");dataset.addValue(350, "沈阳培训中心", "平面工程师班");dataset.addValue(380, "长沙培训中心", "平面工程师班");dataset.addValue(420, "中科院计算所培训中心", "网络工程师班");dataset.addValue(450, "沈阳培训中心", "网络工程师班");dataset.addValue(480, "长沙培训中心", "网络工程师班");dataset.addValue(520, "中科院计算所培训中心", "动漫工程师班");dataset.addValue(550, "沈阳培训中心", "动漫工程师班");dataset.addValue(580, "长沙培训中心", "动漫工程师班");return dataset;}3、创建JFreeChart类的对象实例的代码示例CategoryDataset dataset = getDataSet2();FreeChart chart = ChartFactory.createBarChart3D("招生人数图", // 图表标题"班别", // 目录轴(横坐标)的显示标签"人数", // 数值轴(纵坐标)的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、createBarChart3D、createStackedBarChart3D等方法,这几个工厂方法创建不同类型的柱状图;而其中的PlotOrientation.VERTICAL 参加数让平行柱垂直显示,而 PlotOrientation.HORIZONTAL 则让平行柱水平显示。
使用JfreeChart开发图表经验总结(含源码)使用JfreeChart开发图表经验总结(含源码)Keith He 2005年10月27日最近,公司一项目要出很多的图表。
由于项目是B/S架构的,所以生成的图表也要考虑能在浏览器上动态显示。
生成基于浏览器的图表方式比较多。
据我所知道的,常用的有三种:1、VML方式实现。
这种方式是通过产生客户端的代码,由客户端根据代码生成相应的图表。
但这种方式产生的图表有很多的局限性,如受限于浏览器,有些浏览器可能并不支持VML。
另外,没有封装完整的图表开发包。
2、通过applet来产生图表。
这种方式也对客户端要求比较高,必须要有JRE,而且通过applet生成的图表在加载过程中会有个Java的Log动画。
用户看了可能会感觉不太舒服。
3、通过服务端直接生成图表的图片。
这种方式对客户端几乎没有什么要求,缺点是加重了服务端的负担,对服务端要求就相对高了点。
经过比较,根据项目自身特点,我们打算采用第三种方式来开发图表。
为了缩短开发周期、节约成本,我们选用了开源的JFreeChart(/jfreechart/)。
jfreechart是一个免费创建图表的java工具,目前最新版本是JFreeChart-1.0.0-rc1。
它可以生成各式各样的图表。
这些图表包括饼图、柱状图、线形图、区域图、甘特图等等,基本可以满足各种项目的要求。
但在开发过程中我也发现了JFreeChart的一些不足,或者说有些称得上是BUG。
总体说来,JFreeChart还是个优秀的开源项目。
关于JFreeChart生成图表的文章比较多了,我主要谈谈使用JFreeChart的一些比较棘手问题以及解决方法。
同时也会将问题所用到的源码(JFreeChart-1.0.0-rc1+Struts1.2.4)从项目中抽象出来一起提供给大家。
一、图片上热点链接中文乱码的解决方法这个问题是在我查阅关于JFreeChart相关资料时出现频率最高的一个问题。
1.1通过代码实例跟我学百度EChart图表控件——在J2EE Web应用系统中应用EChart图表控件的实例1.1.1常用报表开发工具介绍1、常用的报表技术及工具jFreeChart(/jfreechart/download.html)FusionChart(/)HighChart(/)EChart(/index.html)2、从不同角度说明这4个报表工具。
(1)应用场景在应用场景上,因为jFreeChart是一个封装好的Jar包,所以支持在应用程序客户端使用,也可以在网站上使用。
而FusionChart、HighChart、EChart都是用于J2EE平台(说白了就是做网站)的报表呈现,不能在客户端使用。
因此,如果不是在网站上使用,而是想在自己的桌面应用程序上呈现报表,那么就只能选择jFreeChart了。
(2)实现技术在实现技术上,jFreeChart产生的报表是通过Java的绘图工具进行绘制的,而在网站页面的时候,jFreeChart将其转化成一张图片。
而FusionChart是通过JS代码进行编写,最终通过Flash呈现报表,而HighChart、EChart 都是通过最新的HTML5技术实现的。
(3)资源丰富在实现效果方面,基本上所有的报表工具都能实现基本的柱形图、饼图、曲线图等基本的图形。
但是如果要求更高的展现方式,比如通过地图展示,那或许只能通过FusionChart和EChart 了。
而EChart因为是百度的开源项目,所以地图方面做得还不错,。
(4)是否收费jFreeCharts使用免费(也是开源项目),但是API文档和实例是要收费的(囧)。
FusionChart基本功能免费,但是有些功能也是需要收费的。
HighChart个人用是免费的,商用需要授权收费。
Echart是百度的一个开源项目,完全没费。
(5)特色功能ECharts可以通过地图呈现更加震撼的效果,而这是其他三个报表根据所没有的一个展示方式。
JFreeChart 是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。
它能够用在Swing 和Web等中制作自定义的图表或报表,并且得到广泛的应用。
本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。
一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。
其下载地址为:/projects/jfreechart/files/,当前最新版本为1.0.14。
笔者下载的是1.0.14最新版。
说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.13.jar、gnujaxp.jar和jcommon-1.0.16.jar这三个包;3)根目录下的jfreechart-1.0.13-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。
2. 环境配置笔者的开发环境如下:JDK:1.6MyEclipse:6.6Tomcat:6.0.18为了后续的“用JFreeChart创建基于Web的图表”的一个例子的展示,我们在MyEclipse中创建一个名为jfreechart的Web工程。
将下载的JFreeChart1.0.14下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。
另外还需要在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>/DisplayChart</url-pattern></servlet-mapping>参数介绍利用JF reeC ha rt插件生成动态统计图表的基本步骤如下:1.准备绘图时需要的相关属性2.创建Datas et对象3.创建JF reeC ha rt实例4.生成自定格式的图片J F r e e C h a r t核心简介:JF r e e Char t:图表对象。
Java数据可视化使用图表库和可视化工具展示数据数据的可视化是现代数据分析和展示的重要手段之一。
通过可视化,我们可以更直观地理解数据背后的模式、趋势和关联性。
在Java编程领域,有许多优秀的图表库和可视化工具可以帮助我们实现数据的可视化展示。
本文将介绍几种常用的Java图表库和可视化工具,并以实例演示它们的使用方法。
一、JFreeChartJFreeChart是一个开源的Java图表库,提供了各种常见的图表类型,包括折线图、柱状图、饼图等。
使用JFreeChart可以轻松地创建并定制各种类型的图表,支持多种数据源的导入和显示。
以下是一个使用JFreeChart创建折线图的示例代码:```javaimport org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.data.xy.DefaultXYDataset;import javax.swing.*;public class LineChartExample {public static void main(String[] args) {// 创建数据集DefaultXYDataset dataset = new DefaultXYDataset();double[][] data = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}};dataset.addSeries("Series 1", data);// 创建折线图JFreeChart chart = ChartFactory.createXYLineChart("Line Chart Example", "X-axis", "Y-axis", dataset);// 创建图表面板ChartPanel chartPanel = new ChartPanel(chart);// 创建窗口并显示图表JFrame frame = new JFrame("Line Chart Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(chartPanel);frame.pack();frame.setVisible(true);}}```以上代码会创建一个包含简单折线图的窗口。
JreeChart案例jFreeChart是Java开发中常用的统计类组件,主要包括柱状图,饼状图等。
下面我们介绍一下jFreeChart最简单的用法。
首先需要导入jFreeChart的jar包,放在项目web\WEB-INF\lib文件夹下。
然后我们以最简洁的代码实现一个统计功能。
1.柱状图import j ava.aw t.Color;import j ava.aw t.Font;import j ava.io.FileNotFoundException;import j ava.io.FileOutputStream;import j ava.io.IOException;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.Def aultCategoryDataset;public class BarChartTest {public static void main(String[] args) {Def aultCategoryDataset dataset = new Def aultCategoryD ataset();dataset.addValue(20, "企业备案数", "北京局");dataset.addValue(18, "企业备案数", "上海局");dataset.addValue(16, "企业备案数", "天津局");dataset.addValue(15, "企业备案数", "重庆局");dataset.addValue(45, "企业备案数", "山东局");JFreeChart chart = ChartFactory.createBarChart("企业备案图", "直属局", "企业备案数",dataset, PlotOrientation.HORIZ ONTA L, true, f alse, false);/***************A start*********///设置标题字体样式TextTitle textTitle = chart.getTitle();textTitle.setFont(new Font("黑体", Font.PLAIN, 20));//设置柱状体颜色C ategoryPlot categoryplot = (CategoryPlot) chart.getPlot ();categoryplot.getRenderer().setSeriesPaint(0, new Color (228,109,10));NumberAxis numberaxis = (NumberAxis) categoryplot.ge tRangeAxis();C ategoryAxis domainAxis = categoryplot.getDomainAxis ();//设置X轴坐标上的字体样式domainAxis.setTickLabelFont(new Font("sans-serif", Font. PLAIN, 11));//设置X轴的标题字体样式domain Axis.setLabelFont(new Font("宋体", Font.PLAIN, 1 2));//设置Y轴坐标上的字体样式numberaxis.setTickLabelFont(new Font("sans-serif", Font. PLAIN, 12));//设置Y轴的标题字体样式numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 1 2));//设置图片最底部字体样式if (c hart.getLegend() != null) {c hart.getLegend().setItemFont(new Font("宋体", Font. PLAIN, 12));}/***************A end*********/try{ChartUtilities.writeChartAsPNG(new FileOutputStream ("D:\\barChart.j pg"), c hart, 400, 200);} c atch (FileNotFoundException e) {e.printStackTrace();} c atch (IOException e) {e.printStackTrace();}}}生成的文件显示效果如下:2.饼状图import j ava.aw t.Color;import j ava.aw t.Font;import j ava.io.FileNotFoundException;import j ava.io.FileOutputStream;import j ava.io.IOException;import j ava.text.DecimalFormat;import j ava.text.N umberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import bels.StandardPieSectionLabelGenerato r;import org.jfree.chart.plot.PiePlot;import org.jfree.data.general.DefaultPieDataset;public class PieChartTest {public static void main(String[] args){Def aultPieDataset pieDataset = new Def aultPieDataset();pieDataset.setValue("北京局",20);pieDataset.setValue("上海局",18);pieDataset.setValue("天津局",16);pieDataset.setValue("重庆局",15);pieDataset.setValue("山东局",45);JFreeChart chart = ChartFactory.createPieChart3D("企业备案图",pieDataset, true, f alse, false);/***************A start*********///设置标题字体样式chart.getTitle().setFont(new Font("黑体",Font.BOLD,20));//设置饼状图里描述字体样式PiePlot piePlot= (PiePlot) chart.getPlot();piePlot.setLabelFont(new Font("黑体",Font.B OLD,10));//设置显示百分比样式piePlot.setLabelGenerator(new StandardPieSectionLabelG enerator(("{0}({2})"), NumberFormat.getNumberInstance (),new DecimalFormat("0.00%")));//设置统计图背景piePlot.setBackgroundPaint(Color.w hite);//设置图片最底部字体样式chart.getLegend().setItemFont(new Font("黑体",Font.BOL D,10));/***************A end*********/try{ChartUtilities.writeChartAsPNG(new FileOutputStream ("D:\\pieChart.jpg"), chart, 400, 300);} c atch (FileNotFoundException e) {e.printStackTrace();} c atch (IOException e) {e.printStackTrace();}}}生成的文件显示效果如下:其中以上两段代码中的“A”代码块中的内容是为了解决图片生成过程中遇到的乱码问题,在实际开发中可以写到一个公共类中,此时应注意服务器的操作系统上是否缺少上述代码中所用到的字体。
jfreechart用法例子一、饼图:DefaultPieDataset dataset=new DefaultPieDataset();//开始填充数据dataset.setValue("Java", new Double(43.200000000000003D));dataset.setValue("Visual Basic", new Double(10D));dataset.setValue("C/C++", new Double(17.5D));dataset.setValue("PHP", new Double(32.5D));dataset.setValue("Perl", new Double(12.5D));JFreeChart chart=ChartFactory.createPieChart("2D饼型图",dataset,true,true,true);chart.setTitle("统计图");//设置图片标题ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection());StringimgaeFileName=ServletUtilities.saveChartAsJPEG(chart,300,200, info,session);//设置生成图片,包括图片的大小,长度是300,宽是200session.setAttribute("image_name1",imageFileName;String URL= request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//Display为org.jfree.chart.servlet.DisplayChartsession.setAttribute("image_url1",URL);显示代码:(以下显示代码不注明了,是一样的,只是session中的属性名不同而已,大家注意区别)" width=300 height=200 border=0 usemap="#<%=session.getAttribute("image_name1") %>">二、3D饼图DefaultPieDataset defaultpiedataset = new DefaultPieDataset();defaultpiedataset.setValue("Java", new Double(43.200000000000003D));defaultpiedataset.setValue("Visual Basic", new Double(10D));defaultpiedataset.setValue("C/C++", new Double(17.5D));defaultpiedataset.setValue("PHP", new Double(32.5D));defaultpiedataset.setValue("Perl", new Double(12.5D));JFreeChart jfreechart = ChartFactory.createPieChart3D("3D 饼图", defaultpiedataset, true, false, false);PiePlot3D pieplot3d = (PiePlot3D)jfreechart.getPlot();String imageFileName2= ServletUtilities.saveChartAsJPEG(jfreechart,300,200,session);session.setAttribute("image_name2",imageFileName2);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName2;session.setAttribute("image_url2",URL);三、柱图DefaultCategoryDataset dataset=new DefaultCategoryDataset();//设置数据源dataset.setValue(new Double(43.200000000000003D),"图解","Java" );dataset.setValue( new Double(10D),"图解","Visual Basic");dataset.setValue(new Double(17.5D), "图解","C/C++");dataset.setValue(new Double(32.5D), "图解","PHP");dataset.setValue(new Double(12.5D), "图解","Perl");//添加数据,参数包括名称和数值JFreeChart chart1=ChartFactory.createBarChart3D("柱图","大人物","地盘", dataset,PlotOrientation.VERTICAL,false,false,false);CategoryPlot plot=chart1.getCategoryPlot();//BarRenderer3D renderer1=new BarRenderer3D();final BarRenderer renderer1 = (BarRenderer)plot.getRenderer();renderer1.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer1.setItemLabelsVisible(true);//显示每个柱子上的数据renderer1.setItemMargin(0.1);//设置每个柱子之间的距离plot.setRenderer(renderer1);//让上面对柱子的设置生效StringimageFileName=ServletUtilities.saveChartAsJPEG(chart1,300,20 0,session);//生成图片,包括图片的大小session.setAttribute("image_name3",imageFileName);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName;session.setAttribute("image_url3",URL);四、线图DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();defaultcategorydataset.addValue(212D, "Classes", "JDK 1.0");defaultcategorydataset.addValue(504D, "Classes", "JDK 1.1");defaultcategorydataset.addValue(1520D, "Classes", "SDK 1.2");defaultcategorydataset.addValue(1842D, "Classes", "SDK 1.3");defaultcategorydataset.addValue(2991D, "Classes", "SDK 1.4");JFreeChart jfreechart = ChartFactory.createLineChart("Java Standard Class Library", "线图", "Class Count", defaultcategorydataset, PlotOrientation.VERTICAL, false, true, false);jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));TextTitle texttitle = new TextTitle("线图");texttitle.setFont(new Font("SansSerif", 0, 10));texttitle.setPosition(RectangleEdge.BOTTOM);texttitle.setHorizontalAlignment(HorizontalAlignment.RIGH T);jfreechart.addSubtitle(texttitle);jfreechart.setBackgroundPaint(Color.white);CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();categoryplot.setBackgroundPaint(Color.lightGray);categoryplot.setRangeGridlinePaint(Color.white);NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createInteger TickUnits());LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();lineandshaperenderer.setShapesVisible(true);lineandshaperenderer.setDrawOutlines(true);lineandshaperenderer.setUseFillPaint(true);lineandshaperenderer.setFillPaint(Color.white);String imageFileName4 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name4",imageFileName4);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName4;session.setAttribute("image_url4",URL);五、时序图TimeSeries timeseries = new TimeSeries("Random Data");Dayday = new Day(1, 1, 1990);double d = 100D;for(int j = 0; j < 4000; j++)try{d = (d + Math.random()) - 0.5D;timeseries.add(day, new Double(d));day = (Day)day.next();}catch(SeriesException seriesexception){System.err.println("Error adding to series");}XYDataset xydataset = new TimeSeriesCollection(timeseries);JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时序图", "Day", "Value", xydataset, false, false, false);XYPlot xyplot = (XYPlot)jfreechart.getPlot();XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();xylineandshaperenderer.setDefaultShapesVisible(false);xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(0.5F, 1, 1, 5F, new float[] {5F, 10F}, 0.0F));xyplot.setRenderer(xylineandshaperenderer);String imageFileName5 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name5",imageFileName5);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName5;session.setAttribute("image_url5",URL);。
示例1为纯Java饼形图实例示例2为jsp页面饼形图实例示例3为jsp页面柱形图实例示例1import java.awt.Color;import java.awt.Font;import java.awt.RenderingHints;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.title.T extTitle;import org.jfree.data.general.DefaultPieDataset;public class TestPieChart {public static void createPieChart() {//用工厂类创建饼图JFreeChart pieChart = ChartFactory.createPieChart("",createDataset(), true, true, false);//用于解决标题中文乱码TextTitle title=new TextTitle("数据4-8",new Font("宋体", Font.PLAIN, 12));pieChart.setTitle(title);//用于解决底部中文乱码pieChart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12));// RenderingHints做文字渲染参数的修改// VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭.pieChart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);//得到饼图的Plot对象PiePlot piePlot = (PiePlot) pieChart.getPlot();setSection(piePlot);setLabel(piePlot);setNoDataMessage(piePlot);setNullAndZeroValue(piePlot);//将饼图显示在图像界面上ChartFrame frame = new ChartFrame("TestPieChart", pieChart);frame.pack();frame.setVisible(true);}public static DefaultPieDataset createDataset() {//设置数据DefaultPieDataset pieDataset = new DefaultPieDataset();pieDataset.setValue("经济", 0.1);pieDataset.setValue("政治", 3.63);pieDataset.setValue("车次", 2.84);pieDataset.setValue("里程", 2.1);pieDataset.setValue("秋", 2.80);return pieDataset;}public static void setSection(PiePlot pieplot) {//设置扇区颜色pieplot.setSectionPaint("经济", new Color(255, 142, 255));pieplot.setSectionPaint("政治", new Color(210, 128, 223));pieplot.setSectionPaint("车次", new Color(100, 96, 191));pieplot.setSectionPaint("里程", new Color(64, 255, 128));//设置扇区分离显示pieplot.setExplodePercent("秋", 0.2D);//设置扇区边框不可见pieplot.setSectionOutlinesVisible(false);}public static void setLabel(PiePlot pieplot) {//设置扇区标签显示格式:关键字:值(百分比)pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}:{1}({2} percent)"));//设置扇区标签颜色pieplot.setLabelBackgroundPaint(new Color(220, 220, 220));pieplot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));}public static void setNoDataMessage(PiePlot pieplot) {//设置没有数据时显示的信息pieplot.setNoDataMessage("无数据");//设置没有数据时显示的信息的字体pieplot.setNoDataMessageFont(new Font("宋体", Font.BOLD, 14));//设置没有数据时显示的信息的颜色pieplot.setNoDataMessagePaint(Color.red);}public static void setNullAndZeroValue(PiePlot piePlot) {//设置是否忽略0和null值piePlot.setIgnoreNullValues(true);piePlot.setIgnoreZeroValues(true);}public static void main(String[] args) {createPieChart();}}示例2<%@ page language="java" import="java.io.*" pageEncoding="utf-8"%> <%@ page import="org.jfree.data.general.DefaultPieDataset"%><%@ page import="org.jfree.chart.*"%><%@ page import="org.jfree.chart.plot.*"%><%@ page import="org.jfree.chart.servlet.ServletUtilities"%><%@ page import="bels.StandardPieToolTipGenerator"%> <%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%><%@ page import="org.jfree.chart.entity.StandardEntityCollection"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>图形</title></head><body><%DefaultPieDataset data = new DefaultPieDataset();//数据初始化data.setValue("高中以下",380);data.setValue("高中",1620);data.setValue("大专",6100);data.setValue("本科",8310);data.setValue("硕士",3520);data.setValue("博士",180);//HttpSession session = request.getSession();PiePlot3D plot = new PiePlot3D(data);//生成一个3D饼图//plot.setURLGenerator(newStandardPieURLGenerator("DegreedView.jsp"));//设定图片链接JFreeChart chart = newJFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色chart.setTitle("程序员学历情况调查表-By Alpha");//可选,设置图片标题plot.setToolTipGenerator(newStandardPieToolTipGenerator());StandardEntityCollection sec = newStandardEntityCollection();ChartRenderingInfo info = new ChartRenderingInfo(sec);PrintWriter w = new PrintWriter(out);//输出MAP信息//500是图片长度,300是图片高度//String filename =ServletUtilities.saveChartAsPNG(chart,500,300,info,session);//.pngString filename =ServletUtilities.saveChartAsJPEG(chart,500,300,info,session);//.jpegChartUtilities.writeImageMap(w,"map0",info,true);String graphURL = request.getContextPath() +"/servlet/DisplayChart?filename=" + filename;%><P ALIGN="CENTER"><img src="<%=graphURL %>" width=500 height=300 border=0 usemap="#map0"> </P></body></html>注:web.xml配置<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><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><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>示例3<%@ page language="java" pageEncoding="utf-8"%><%@ page import="org.jfree.chart.ChartFactory"%><%@ page import="org.jfree.chart.ChartUtilities"%><%@ page import="org.jfree.chart.JFreeChart"%><%@ page import="org.jfree.chart.plot.PlotOrientation"%><%@ page import="org.jfree.data.category.DefaultCategoryDataset"%> <%@ page import="java.awt.Color"%><%@ page import="org.jfree.chart.renderer.category.BarRenderer3D"%> <%@ pageimport="bels.StandardCategoryItemLabelGenerator"%> <%@ page import="org.jfree.chart.axis.CategoryAxis"%><%@ page import="org.jfree.chart.plot.CategoryPlot"%><%@ page import="java.awt.*"%><%@ page import="org.jfree.chart.title.TextTitle"%><%@ page import="org.jfree.chart.axis.NumberAxis"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>柱形</title></head><body><%DefaultCategoryDataset dataset = newDefaultCategoryDataset();dataset.addValue(150, " 北京 ", " 苹果 ");dataset.addValue(530, " 上海 ", " 苹果 ");dataset.addValue(160, " 广州 ", " 苹果 ");dataset.addValue(120, " 北京 ", " 梨子 ");dataset.addValue(230, " 上海 ", " 梨子 ");dataset.addValue(360, " 广州 ", " 梨子 ");dataset.addValue(600, " 北京 ", " 葡萄 ");dataset.addValue(430, " 上海 ", " 葡萄 ");dataset.addValue(560, " 广州 ", " 葡萄 ");dataset.addValue(400, " 北京 ", " 香蕉 ");dataset.addValue(530, " 上海 ", " 香蕉 ");dataset.addValue(660, " 广州 ", " 香蕉 ");dataset.addValue(500, " 北京 ", " 荔枝 ");dataset.addValue(630, " 上海 ", " 荔枝 ");dataset.addValue(430, " 广州 ", " 荔枝 ");JFreeChart chart = ChartFactory.createBarChart3D(""," 水果种类-/Alpha/ ", " 销量 ", dataset,PlotOrientation.VERTICAL, true, false, false);chart.setBackgroundPaint(Color.WHITE);CategoryPlot plot = chart.getCategoryPlot();//设置字体,不然会中文乱码的Font font = new Font("宋体", Font.BOLD, 16);TextTitle title = new TextTitle("水果销量图统计-By Alpha", font);chart.setTitle(title); //标题//副标题//TextTitle subtitle = new TextTitle("副标题", new Font("黑体", Font.BOLD,12));//chart.addSubtitle(subtitle);NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();CategoryAxis domainAxis = plot.getDomainAxis();//设置X轴坐标上的文字domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 11));//设置X轴的标题文字domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));//设置Y轴坐标上的文字numberaxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 12));//设置Y轴的标题文字numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));//底部汉字乱码的问题chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));plot.setDomainAxis(domainAxis);BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.1);// 显示每个柱的数值,并修改该数值的字体属性renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.8f);ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart,640, 400);%></body></html>注:示例3中红色字体为解决中文乱码问题,具体见注释。
1.1通过代码实例跟我学Java 图表技术——开源JFreeChart Web图表组件在J2EE 项目中的应用实例1.1.1Web图表技术1、Web图表技术概述在开发应用程序时,经常会遇到必须提供交互式图表的情况。
客户要求应用程序能够用饼图、柱形图或XY散点图的形式直观地描述数据。
(1)B/S与C/S方式下的图表技术的不同WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。
传统的一些以软件包形式发布的应用程序,例如报表系统等,都被逐渐搬到了因特网上。
但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面---B/S下的UI不及C/S 下的丰富。
(2)如何实现Web方式下的图表为了能在web浏览器上显示所需的用户界面,需要使用HTML以及图片的方式来展现数据。
1)传统的一些利用操作系统本身的控件来开发的用户界面就无法适应琳琅满目的客户端需求。
2)为了可以在web浏览器上查看到图表,一般有下面的几种做法。
2、图表技术的基础Java Graphics2D技术。
3、实现Web图表的各种技术可以使用Java Applet或者J2EE JSP/Servlet等程序方式。
4、实现Web图表的各种技术直接在Web服务器端生成好图表图片文件后再发送给浏览器。
5、实现Web图表的各种技术----使用JAVA的图表引擎JFreeChart(1)实现的原理JFreeChart主要用来开发各种各样的图表,并且是目前比较好的Java图表解决方案。
可以产生基于Web的图表。
(2)实现的示例:http://127.0.0.1:8080/NetBook/WebChar/JFreeChartSample.jsp注意:在上面的三种方式中,其中以第三种方式的功能比较强大,但也需要进行复杂的编程实现。
1.1.2开源的图表组件JFreeChart1、开源的图表组件JFreeChart(1)JFreeChart公司的各个产品JFreeChart是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下的几种:1)JFreeReport:报表解决工具2)JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3)JCommon:JFreeReport和JFreeChart的公共类库4)JFreeDesigner:JFreeReport的报表设计工具(2)JFreeChart概述2、JFreeChart所能够产生的主要图形类型JFreeChart主要用来开发各种各样的图表,并且是目前比较好的Java图表解决方案。