通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建饼图的应用实例(Eclipse开发工具版本)

合集下载

通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建柱状图的应用实例(Eclipse开发工具版本)

通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建柱状图的应用实例(Eclipse开发工具版本)

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开发图表经验总结(含源码)

使用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相关资料时出现频率最高的一个问题。

通过代码实例跟我学百度EChart图表控件——百度EChart商业级数据图表控件相关的应用技术

通过代码实例跟我学百度EChart图表控件——百度EChart商业级数据图表控件相关的应用技术

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入门教程

JFreeChart入门教程

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数据可视化使用图表库和可视化工具展示数据数据的可视化是现代数据分析和展示的重要手段之一。

通过可视化,我们可以更直观地理解数据背后的模式、趋势和关联性。

在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);}}```以上代码会创建一个包含简单折线图的窗口。

Java开发条形图、柱形图、饼图生成

Java开发条形图、柱形图、饼图生成

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用法例子

jfreechart用法例子

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);。

JFreeChart实例

JFreeChart实例
dataset.addValue(40,"第2个属性","第1组");
dataset.addValue(30,"第2个属性","第2组");
dataset.addValue(60,"第3个属性","第1组");
dataset.addValue(20,"第3个属性","第2组");
//生成图表
JFreeChart chart = ChartFactory.createBarChart3D(title,bottomTitle,leftTitle,dataset,PlotOrientation.VERTICAL,isShowDataName,true,true);
e.addAttribute("title","自定义提示信息1\n自定义提示信息2");
e.addAttribute("href", request.getContextPath());//自定义点击热点后的链接地址
}
imgUseMapStr = root.asXML();
writer.print(imgUseMapStr);
List<Element> childList = root.elements("area");
for(inti=0; i<childList.size(); i++){
Element e = childList.get(i);
e.remove(e.attribute("title"));
e.remove(e.attribute("href"));

关于JFreeChart的饼形图、柱形图实例及中文乱码解决方案

关于JFreeChart的饼形图、柱形图实例及中文乱码解决方案

示例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中红色字体为解决中文乱码问题,具体见注释。

通过代码实例跟我学Java 图表技术——开源JFreeChart Web图表组件在J2EE 项目中的应用实例

通过代码实例跟我学Java 图表技术——开源JFreeChart Web图表组件在J2EE 项目中的应用实例

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图表解决方案。

java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)

java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)

各类统计程序实现杨方 531115121 矢量图的生成矢量统计图,即是以矢量图形格式生成、存在和输出的统计图。

这种统计图图形要素丰富、交互编辑简单、存储格式多样,打印输出方便,是GIS应用系统最优先选择的统计图。

最常用的三类矢量统计图是直方图、曲线图、饼图。

矢量统计图的生成,首先要将数据组织为一定的格式,然后进行图形参数的计算和设置,再生成图形,最后进行浏览显示或者保存输出。

当然,如果对生成的图形不满意,可以进行参数修改,然后重新生成,最后再显示或保存。

1.1 数据组织原始数据可以整理为二维表格的形式,通过文件(*.txt,*.xls,*.doc)导入,也可以将数据整理为二维数组的形式输入。

统计图只支持为数值型的数据,包括整型、长整型、浮点型和双精度型等4种数据类型。

1.2 设置参数图形参数可以由用户外部输入,也可以根据数据生成默认参数,分为基本参数、坐标参数、图例参数和数据参数等。

(1)基本参数包括图形类型,图形名称,图形范围,点、线、区参数等。

(2)坐标轴参数包括是否绘制轴线、刻度线、标注、网格线的标志,刻度数,颜色,名称,比例尺,以及是否绘制包围盒或箭头的标志。

(3)图例参数包括是否绘制图例的标志和图例显示位置标志。

(4)数据参数包括数据类型,是否绘制数据表的标志,图形单元的宽度或间隔、图形单元的颜色,系列和类别显示标志等。

1.3 图形生成生成图形的基本步骤如下:(1)确认存在点、线、面工作区。

生成的图形要暂时存入工作区中,然后才能进行显示或保存。

点线面工作区可以由外部输入,也可以在软件中生成。

(2)确认各项图形参数有效。

必须保证每项图形参数都有效,否则软件将出错。

对于没有设置有效值的参数,要重新设置默认参数。

(3)依次生成图形的各个要素:生成坐标轴、生成图形主体、生成数据表、生成图例和生成图形。

在生成统计图的过程中,要随时计算图形的当前范围,以控制后续元素的位置。

1.4 图形显示统计图生成后,保存在MAPGIS的点线面工作区中,可以调用MAPGIS的图形显示视图进行显示。

使用JFreeChart创建图表

使用JFreeChart创建图表

JFreeChart概述
JFreeChart是开放源代码站点 是开放源代码站点上的一 是开放源代码站点 上的一 项目, 个JAVA项目,它主要用来各种各样的图表,这些图表包括: 项目 它主要用来各种各样的图表,这些图表包括:
Pie charts:饼图 (2D and 3D)、 Bar charts:柱状图 (2D and 3D) Line charts:曲线图 Area charts(区域图)、XY Plots(坐标图)、Time Series Charts(时序图)、 Histograms(直方图)、Difference Chart(方差图)、Step Chart(步骤图)、 Gantt Chart(甘特图)、Multiple Axis Charts、Combined and Overlaid Charts(混合图)等等
柱状图
step1:创建数据集对象
public static CategoryDataset createDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(5000, "北京","易学java"); dataset.setValue(3000, "上海","易学java"); dataset.setValue(2000, "广州","易学java"); dataset.setValue(10000, "北京","JavaWeb整合开发与项目实战"); dataset.setValue(6000, "上海","JavaWeb整合开发与项目实战"); dataset.setValue(4000, "广州","JavaWeb整合开发与项目实战"); dataset.setValue(15000, "北京","易用struts"); dataset.setValue(5000, "上海","易用struts"); dataset.setValue(10000, "广州","易用struts"); dataset.setValue(20000, "北京","精通JSF"); dataset.setValue(10000, "上海","精通JSF"); dataset.setValue(10000, "广州","精通JSF"); return dataset; }

JFreeChart入门 - 使用JFreeChart开发Pie(饼状图)

JFreeChart入门 - 使用JFreeChart开发Pie(饼状图)

本文介绍怎么样使用JFreeChart来开发一个Pie图(饼状图)。

测试环境OS:WindowsXPJava:jdk1.5.0_06JFreeChart:1.0.9(2008年3月最新版本)※因为JFreeChart采用Java开发而成,所以在其他系统也能正常运行。

JFreeChart Pie图的开发JFreeChart开发一个饼图非常简单,大致分以下三步:步骤1:创建PieDataset对象(准备数据)步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置步骤3:将JFreeChart对象输出到文件,Servlet输出流等Java代码:CreateJFreeChartPie.javaview plaincopy to clipboardprint?1.package com.syboos.demo.jfreechart;2.83.public static PieDataset createDataset() {84. DefaultPieDataset defaultpiedataset = new DefaultPieDataset();85. defaultpiedataset.setValue("One", new Double(37.800000000003D));86. defaultpiedataset.setValue("Two", new Double(20.002D));87. defaultpiedataset.setValue("Three", new Double(17.504D));88. defaultpiedataset.setValue("Four", new Double(47D));89.return defaultpiedataset;90. }91.92.}编译与执行执行以下操作:C:\Work\Download\JFreeChart\demos>javac -classpath .;jcommon-1.0.12.jar;jfreechart-1.0.9.jarcom/syboos/demo/jfreechart/CreateJFreeChartPie.javaC:\Work\Download\JFreeChart\demos>java-classpath .;jcommon-1.0.12.jar;jfreechart-1.0.9.jar com.syboos.demo.jfreechart.CreateJFreeChartPie C:\Work\Download\JFreeChart\demos>※参考:C:\Work\Download\JFreeChart\demos文件夹的阶层如下:jcommon-1.0.12.jarjfreechart-1.0.9.jarcom\syboos\demo\jfreechart\CreateJFreeChartPie.java执行后,可以发现生成了C:\jfreechart\pie.png文件===============================================================================一、jFreeChart产生图形的流程创建一个数据源(dataset)来包含将要在图形中显示的数据>>创建一个JFreeChart 对象来代表要显示的图形>>把图形输出重要的类和接口:org.jfree.data.general.Dataset 所有数据源类都要实现的接口org.jfree.chart.ChartFactory 由它来产生JFreeChart 对象org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整注意:它有很多子类,一般都下嗍造型到它的子类!org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。

跟我学JasperReports报表框架——使用脚本类程序动态生成JFreeChart图表的应用实例

跟我学JasperReports报表框架——使用脚本类程序动态生成JFreeChart图表的应用实例

1.1跟我学JasperReports报表框架——使用Java脚本类程序动态生成JFreeChart图表的应用实例1、实现原理(1)在报表上插入一个图片,赋给它一个变量Chart(为net.sf.jasperreports.engine.JRRenderable)类型。

在图片的Image Expresion处设置$V{Chart}。

(2)如何再编程一个类,该类为变量Chart返回一个JCommonDrawableRenderer对象,该对象包装一个JFreeChart的对象。

(3)最后利用实现自己的JFreeChart对象以产生满足要求的图表。

下面通过具体的代码示例及操作过程的截图详细说明实现方法和对应的程序代码。

2、产生一个报表,名称为“使用脚本类程序生成JFreeChart图表”3、为该报表设置一个名称为Chart的变量类型为net.sf.jasperreports.engine.JRRenderable,Calculate type 为System4、最后为下面的状态5、在该报表中插入一个图片6、设置图片的属性在图片的Image Expresion处设置$V{Chart}、Image Expresion Class设置为net.sf.jasperreports.engine.JRRenderable类型,其他按照下面的图示设置。

在Hyperlink设置为7、为该编程一个类JFreeChartScriptlet.java它可以动态生成一个饼图并赋给前面的Chart变量(请见下面的黑体的代码)。

import net.sf.jasperreports.engine.JRDefaultScriptlet;import net.sf.jasperreports.engine.JRScriptletException;import net.sf.jasperreports.renderers.JCommonDrawableRenderer;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PiePlot3D;import org.jfree.data.general.DefaultPieDataset;import org.jfree.util.Rotation;public class JFreeChartScriptlet extends JRDefaultScriptlet{public void afterReportInit() throws JRScriptletException{DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java", new Double(43.2));dataset.setValue("Visual Basic", new Double(10.0));dataset.setValue("C/C++", new Double(17.5));dataset.setValue("PHP", new Double(32.5));dataset.setValue("Perl", new Double(1.0));JFreeChart chart =ChartFactory.createPieChart3D("Pie Chart 3D Demo 1",dataset,true,true,false);PiePlot3D plot = (PiePlot3D) chart.getPlot();plot.setStartAngle(290);plot.setDirection(Rotation.CLOCKWISE);plot.setForegroundAlpha(0.5f);plot.setNoDataMessage("No data to display");this.setVariableValue("Chart", new JCommonDrawableRenderer(chart));}}本JFreeChartScriptlet类继承自JRDefaultScriptlet类,并只需要重写其中的一个方法afterReportInit()方法,同时再将包装JFreeChart对象的JCommonDrawableRenderer类对象赋给名称为Chart的变量就行了。

通过实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)

通过实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)

1.1通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)1.1.1创建时间序列图的应用实例时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。

时间序列图的dataset 是XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入TimeSeriesCollection 。

1、添加时间序列图的类类名称为TimeSeriesDemo、包名称为com.px1987.j2sejfreechart.demo2、创建一个数据源(dataset)的代码示例TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段3、由ChartFactory 类产生出JFreeChart类的对象实例的代码示例JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",oneXYDataset,true,true,false);jfreechart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));4、生成和输出图表(本地图像的保存)的代码示例FileOutputStream fos_jpg = null;String tempDirName=null,picFileName=null;try {File tempDir = new File(System.getProperty("java.io.tmpdir"));tempDirName = tempDir.getAbsolutePath();picFileName=tempDirName+"/timeSeries.jpg";fos_jpg = new FileOutputStream(picFileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,jfreechart,800,500,null);System.out.println("图表已经正确地保存到"+picFileName);}catch(IOException e){System.out.println("不能正确地保存"+picFileName);}finally{try {fos_jpg.close();}catch (Exception e){}}5、本示例完整的程序代码示例package com.px1987.j2sejfreechart.demo;import java.awt.Color;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.RectangleInsets;public class TimeSeriesDemo {public TimeSeriesDemo() throws IOException {JFreeChart timeSeriesChart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",createXYDataset(),true,true,false);timeSeriesChart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)timeSeriesChart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));File tempDir = new File(System.getProperty("java.io.tmpdir"));String tempDirName = tempDir.getAbsolutePath();String picFileName=tempDirName+"/timeSeries.jpg";writeImagetoFile(picFileName,timeSeriesChart);System.out.println("图表已经正确地保存到"+picFileName);}public static void main(String[] args) throws IOException {new TimeSeriesDemo();}private void writeImagetoFile(String fileName,JFreeChart oneJFreeChart) throws IOException{FileOutputStream fos_jpg = null;fos_jpg =new FileOutputStream(fileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,oneJFreeChart,600,500,null);}private XYDataset createXYDataset() {TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(5, 2007), 167.6D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(3, 2008), 109.6D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段return timeseriescollection;}}6、测试本示例目前的应用效果7、将出现下面的提示8、图表为下面的结果。

JFreechart教程与实例

JFreechart教程与实例

以图形报表的形式对数据进行统计分析,其显示结果非常直观、清晰,查看者能够一目了然。

然而图表的制作非常繁琐,而且当数据发生变化时,需要对其进行重新绘制。

在Java语言中,JFreeChart组件为图形报表技术提供了解决方案。

JFreeChart组件用于绘制动态图表,其强大的功能、出色的制图效果及便捷的操作方法在Java领域中已得到一致的认可。

本章将向读者介绍JFreeChart组件的使用方法及常见动态图表案例。

通过阅读本章,您可以:了解动态图表掌握JFreeChart组件的制图方法掌握制图对象理解数据集合掌握常用绘图区对象类型及关系掌握坐标轴对象类型及关系掌握图片渲染对象了解JFreeChart组件的内置JDBC1 JFreeChart简介JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表。

在Java的图形报表技术中,JFreeChart组件提供了方便、快捷、灵活的制图方法。

1.1 认识JFreeChart组件作为一个功能强大的图形报表组件,JFreeChart为Java的图形报表技术提供了解决方案。

在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。

JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。

这些效果可以在下载JFreeChart组件后,通过运行JFreeChart提供的例子程序jfreechart-1.0.13-demo.ja进行查看,其运行后的效果如图24.1所示。

1.2 JFreeChart的下载与使用JFreeChart是开放源代码的图形报表组件(开源站点上的一个Jave项目),其主页为/jfreechart/index.html,如图24.2所示。

在主页中单击DOWNLOAD导航链接将进入下载页面,选择所要下载的JfreeChart版本即可进行下载,在本书编写时其最新版本为1.0.13,本章将以此版本为例进行讲解。

通过实例跟我学JFreeChart 图表组件——在 Web应用中采用JSP+JavaBean方式应用JFreeChart的实例(第2部分)

通过实例跟我学JFreeChart 图表组件——在 Web应用中采用JSP+JavaBean方式应用JFreeChart的实例(第2部分)

barChartBeanID.setImagesWidth(imagesWidth);
barChartBeanID.setImagesHeight(imagesHeight);
barChartBeanID.setImagesTitle(imagesTitle);
barChartBeanID.setPageContext(pageContext); barChartBeanID.createImage(); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>My JSP 'showSomeImage.jsp' starting page</title> </head>
<%
request.setCharacterEncoding("gb2312");
String imagesWidth=request.getParameter("imagesWidth");
String imagesHeight=request.getParameter("imagesHeight");
杨教授工作室,版权所有,盗版必究, 1/9 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)showSomeBarImage.jsp 页面的代码示例
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

Jfreechart 图表开发文档

Jfreechart 图表开发文档

Jfreechart 图表开发文档目标简介:只要按要求写好sql 语句就能生成相应的图表。

实现步骤:1.置图表属性2.写sql 语句3.取图表数据对象4.生成图表5.显示图表详细说明:1.置图表属性图表属性类中定义了图表的属性信息,如,图表标题,图表热链接,是否3D效果显示code:String title = "统计图2";ChartProperty cp = new ChartProperty(title);cp.setChart3D(false);cp.setHitUrl("/servlet/_test");2.写sql 语句sql语句要求:饼型图,柱型图要求sql 语句的select 字段,第一个为String 型,第二个为number 型,曲线图第一个字段要求为日期型,第二个字段为number型,可以有第三个字段,第四个字段…..(n个)这个可生成多曲线图表。

code:1.String sql = "select basepricetype, sum(saleprice)" +" from tb_builsrc_contractinfo" +" where affirm_date >= to_date('2004-06-01', 'yyyy-MM-dd') and" +" affirm_date <= to_date('2004-06-02', 'yyyy-MM-dd')" +" group by basepricetype";2.sql = "select affirm_date, baseprice, saleprice" +" from tb_builsrc_contractinfo" +" where affirm_date >= to_date('2004-06-01 00:00:00', 'yyyy-MM-dd HH24:mi:SS') and " +" affirm_date <= to_date('2004-06-01 23:59:59', 'yyyy-MM-dd HH24:mi:SS')" +" order by affirm_date ";3.取图表数据对象生成不同图表所在生成的jfreechart 数据对象不同,jfreechart提供三个接口,饼型图为,PieDataset,要柱型图为CategoryDataset, 曲线图为XYDataset,同时在交易系统包中提供有DbChartCenter类,静态封装生成不同图表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

data, true, // 是否显示图例
false,
// 是否显示 tooltips
false); //是否显示 URLs
/* PiePlot pieplot = (PiePlot)jfreechart.getPlot(); //通过 JFreeChart 对象获得 PiePlot,
然后对它进行修改和定制
就需要再通过 get 方法得出相应的 Plot 类对象并进行修改和定制它们。
3、创建饼图的代码示例
(1)创建一个数据源(dataset)
饼图的 dataset 一般是用 PieDataset 接口,具体实现类是 DefaultPieDataset。下面为代码示例:
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Java",100);
dataset.setValue("C++",200);
dataset.setValue("Basica",300);
dataset.setValue("J2EE",400);
dataset.setValue("",500);
return dataset;
}
(2)由 ChartFactory 类产生出 JFreeChart 类的对象实例
JFreeChart chart = ChartFactory.createPieChart3D("创建饼图的示例", // 图表标题
杨教授工作室,版权所有,盗版必究, 3/7 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
public static void main(String[] args) {
PieChartDemo one=new PieChartDereeChart=one.createOneChart();
FileOutputStream fos_jpg = null; String tempDirName=null,picFileName=null; try {
杨教授工作室,版权所有,盗版必究, 2/7 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
File tempDir = new File(System.getProperty("java.io.tmpdir")); tempDirName = tempDir.getAbsolutePath(); picFileName=tempDirName+"/cursorPie.jpg"; fos_jpg = new FileOutputStream(picFileName); ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,chart,400,300,null); System.out.println("图表已经正确地保存到"+picFileName); } catch(IOException e){ System.out.println("不能正确地保存"+picFileName); } finally { try{
对采用 ChartFactory 类来创建 Chart 的说明:此方法的实质,实际上是由工厂类代替用户生成必
杨教授工作室,版权所有,盗版必究, 1/7 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
要的 Render 和 Plot 类(当然,对它们两者都应用默认的设置参数)。如果用户不想使用默认的设置,
String chartFileName="myPie.jpeg";
one.outPutOneChart(chartFileName, oneJFreeChart);
2、如何创建不同的图形的两种方式 (1)通过 org.jfree.chart.ChartFactory 类中的不同方法生成不同的 Chart 类型,可以相应地缩小由 dataset 对不同的 chart 对象的操作过程代码量,直接获得 chart 对象。 (2)常规利用 ChartFactory 类的构造方法并传入 Plot 对象实例
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 通过代码实例跟我学 JFreeChart 图表组件——在 Java 应用程序中创建 饼图的应用实例(Eclipse 开发工具版本)
1.1.1 创建饼图的应用实例
1、新建一个 Java 项目 (1)新建本示例的 Java 项目
(2)将 JFreechart 的系统包引入到本项目中---由于本例为 J2SE
fos_jpg.close(); } catch (Exception e) { } } (4)完整的程序代码示例 package com.px1987.j2sejfreechart.demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class PieChartDemo { public PieChartDemo() { }
pieplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容
*/
(3)生成和输出图表(本地图像的保存)
JFreeChart 的本地图像(如在 J2SE 的应用中)的输出一般由 org.jfree.chart.ChartUtilites 完
成,这个类可以向指定的 PrintWriter 对象输出完成的 Chart 对象。
相关文档
最新文档