JFreeChart初学者入门实例详细解析之二
来源:互联网 发布:2016进出口贸易数据 编辑:程序博客网 时间:2024/05/22 05:25
前面的系列文章JFreeChart初学者入门实例详细解析已经介绍过了 JFreeChart 生成饼状图的实例,下面我们介绍 JFreeChart 如何生成柱状图。这次我们介绍使用 JFreeChart 生成柱状图,同样也是首先从一个最简单的例子开始。
一、最简单的例子为了降低门槛,让大家心理有个底,先介绍一个简单的不能再简单的例子,图片中的各类属性都采用默认值。
这个 JSP 程序运行的结果如下图
图一
二、柱状图高级特性
上面的程序简单,但生成的柱状图也很简单。更多的时候,我们可能需要不同的效果。org.jfree.chart.ChartFactory 这个工厂类有 createBarChart, createStackedBarChart, createBarChart3D, createStackedBarChart3D 这几个工厂方法创建不同类型的柱状图。
关于这四个方法的 JFreeChart 的 Java Doc API 文档有详细说明,比较重要的是 PlotOrientation.VERTICAL 让平行柱垂直显示,而 PlotOrientation.HORIZONTAL 则让平行柱水平显示。
几个对柱状图影响较大的几个类,它们分别是:
org.jfree.chart.axis.CategoryAxis
org.jfree.chart.axis.ValueAxis
org.jfree.chart.renderer.BarRenderer
org.jfree.chart.renderer.BarRenderer3D
我们还是以实例来说明这几个类,先来假设一个需要统计的数据表:
北京上海广州成都深圳苹果672766223540126梨子325521210340106葡萄332256523240526
根据上表数据,首先构造 CategoryDataset, 这里不再使用上面简单例子里面的 DefaultCategoryDataset 类,而是 DatasetUtilities 更有效的构造 CategoryDataset,如下列代码:
用上面的 dataset 生成的 3D 柱状图
图二
org.jfree.chart.axis.CategoryAxis
图三
org.jfree.chart.axis.ValueAxis
图四
org.jfree.chart.renderer.BarRenderer3D
上面代码产生的效果如下图,注意与图二的区别。
图五
补充两个有用的方法
补充 org.jfree.chart.plot.CategoryPlot 的两个方法,这两个方法对所有类型的图表都有作用,因为在前面没有介绍,这里补充一下。
图六
三 完整范例
前面都是一些代码片段,现在把这些片段组合成一个完整范例。
看看程序运行的结果吧:
图七
一、最简单的例子为了降低门槛,让大家心理有个底,先介绍一个简单的不能再简单的例子,图片中的各类属性都采用默认值。
<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.DefaultCategoryDataset"%><%DefaultCategoryDataset dataset =new DefaultCategoryDataset();dataset.addValue(300, "广州", "苹果");dataset.addValue(200, "广州", "梨子");dataset.addValue(500, "广州", "葡萄");dataset.addValue(340, "广州", "芒果");dataset.addValue(280, "广州", "荔枝");JFreeChart chart = ChartFactory.createBarChart3D("水果销量统计图", "水果", "销量", dataset, PlotOrientation.VERTICAL, false, false, false);String filename =ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);String graphURL =request.getContextPath()+ "/servlet/DisplayChart?filename=" + filename;%><ccid_file values="<%=" graphURL % />"width=500 height=300 border=0 usemap="#<%= filename %>">
这个 JSP 程序运行的结果如下图
二、柱状图高级特性
上面的程序简单,但生成的柱状图也很简单。更多的时候,我们可能需要不同的效果。org.jfree.chart.ChartFactory 这个工厂类有 createBarChart, createStackedBarChart, createBarChart3D, createStackedBarChart3D 这几个工厂方法创建不同类型的柱状图。
关于这四个方法的 JFreeChart 的 Java Doc API 文档有详细说明,比较重要的是 PlotOrientation.VERTICAL 让平行柱垂直显示,而 PlotOrientation.HORIZONTAL 则让平行柱水平显示。
几个对柱状图影响较大的几个类,它们分别是:
org.jfree.chart.axis.CategoryAxis
org.jfree.chart.axis.ValueAxis
org.jfree.chart.renderer.BarRenderer
org.jfree.chart.renderer.BarRenderer3D
我们还是以实例来说明这几个类,先来假设一个需要统计的数据表:
根据上表数据,首先构造 CategoryDataset, 这里不再使用上面简单例子里面的 DefaultCategoryDataset 类,而是 DatasetUtilities 更有效的构造 CategoryDataset,如下列代码:
double[][] data = new double[][]{{672, 766, 223, 540, 126},{325, 521, 210, 340, 106},{332, 256, 523, 240, 526}};String[] rowKeys ={"苹果","梨子","葡萄"};String[] columnKeys = {"北京","上海","广州","成都","深圳"};CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
用上面的 dataset 生成的 3D 柱状图
org.jfree.chart.axis.CategoryAxis
CategoryAxis domainAxis =plot.getDomainAxis();//设置 columnKey 是否垂直显示domainAxis.setVerticalCategoryLabels(true);//设置距离图片左端距离domainAxis.setLowerMargin(0.1);//设置距离图片右端距离domainAxis.setUpperMargin(0.1);//设置 columnKey 是否间隔显示domainAxis.setSkipCategoryLabelsToFit(true);plot.setDomainAxis(domainAxis); 上面代码产生的效果如下图,注意与图二的区别。
org.jfree.chart.axis.ValueAxis
ValueAxis rangeAxis = plot.getRangeAxis();//设置最高的一个柱与图片顶端的距离rangeAxis.setUpperMargin(0.15);//设置最低的一个柱与图片底端的距离//rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis); 上面代码产生的效果如下图,注意与图二的区别。
org.jfree.chart.renderer.BarRenderer3D
BarRenderer3D renderer =new BarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);//设置 Wall 的颜色renderer.setWallPaint(Color.gray);//设置每种水果代表的柱的颜色renderer.setSeriesPaint(0, new Color(0, 0, 255));renderer.setSeriesPaint(1, new Color(0, 100, 255));renderer.setSeriesPaint(2, Color.GREEN);//设置每种水果代表的柱的 Outline 颜色renderer.setSeriesOutlinePaint(0, Color.BLACK);renderer.setSeriesOutlinePaint(1, Color.BLACK);renderer.setSeriesOutlinePaint(2, Color.BLACK);//设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.1);//显示每个柱的数值,并修改该数值的字体属性renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));renderer.setItemLabelsVisible(true);
上面代码产生的效果如下图,注意与图二的区别。
补充两个有用的方法
补充 org.jfree.chart.plot.CategoryPlot 的两个方法,这两个方法对所有类型的图表都有作用,因为在前面没有介绍,这里补充一下。
//设置地区、销量的显示位置plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); 上面代码产生的效果如下图,注意与图二的区别。
三 完整范例
前面都是一些代码片段,现在把这些片段组合成一个完整范例。
<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.awt.Color, java.awt.Font,org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.CategoryDataset,org.jfree.data.DatasetUtilities,org.jfree.chart.plot.CategoryPlot,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.ValueAxis,org.jfree.chart.renderer.BarRenderer3D,org.jfree.chart.labels.StandardCategoryItemLabelGenerator,org.jfree.chart.axis.AxisLocation"%><%double[][] data = new double[][]{{672, 766, 223, 540, 126},{325, 521, 210, 340, 106},{332, 256, 523, 240, 526}};String[] rowKeys = {"苹果","梨子","葡萄"};String[] columnKeys ={"北京","上海","广州","成都","深圳"};CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);JFreeChart chart =ChartFactory.createBarChart3D("水果销量图统计",null,null,dataset,PlotOrientation.VERTICAL,true,false,false);chart.setBackgroundPaint(Color.WHITE);CategoryPlot plot =chart.getCategoryPlot();CategoryAxis domainAxis =plot.getDomainAxis();domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis =plot.getRangeAxis();//设置最高的一个 Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);//设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer3D renderer =new BarRenderer3D();renderer.setBaseOutlinePaint(Color.BLACK);//设置 Wall 的颜色renderer.setWallPaint(Color.gray);//设置每种水果代表的柱的颜色renderer.setSeriesPaint(0, new Color(0, 0, 255));renderer.setSeriesPaint(1, new Color(0, 100, 255));renderer.setSeriesPaint(2, Color.GREEN);//设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.1);//显示每个柱的数值,并修改该数值的字体属性renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelsVisible(true);plot.setRenderer(renderer);//设置柱的透明度plot.setForegroundAlpha(0.6f);//设置地区、销量的显示位置plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);String graphURL = request.getContextPath()+ "/servlet/DisplayChart?filename="+ filename;%s><ccid_file values="<%=" graphURL % />" width=500 height=300 border=0 usemap="#<%= filename %>">
看看程序运行的结果吧:
- JFreeChart初学者入门实例详细解析之二
- JFreeChart初学者入门实例详细解析(一)
- JFreeChart初学者入门实例详细解析(转载)
- JFreeChart初学者入门实例详细解析(一)
- JFreeChart -- 饼形图实例解析
- JFreeChart -- 柱状图实例解析
- JFreeChart -- 饼形图实例解析
- JFreeChart -- 柱状图实例解析
- ArduinoUNO+蜂呜器之初学者入门实例
- JFreeChart -- 线形图实例解析
- JFreeChart -- 时序图实例解析
- JFreeChart -- 线形图实例解析
- JFreeChart -- 时序图实例解析
- 初学者入门 JAVA 的 XML 编程实例解析
- 初学者入门 JAVA 的 XML 编程实例解析
- 《shell脚本学习指南》学习笔记之入门 二 grep详细解析
- JFreeChart 详细介绍使用(二)
- Eclipse创建Hibernate入门实例代码详细解析
- ASP.NET技术FAQ
- 桌面天气秀 3.6 正式版
- JFreeChart初学者入门实例详细解析(一)
- 鸿业銁开 大酬宾 现在注册75折
- 用Timer实现定时运行
- JFreeChart初学者入门实例详细解析之二
- 在asp.net中长内容自动分页的实现
- MPEG4视频压缩编码技术详解
- 转贴:编程修养(四)
- 编程实现更改文件夹图标
- (原创)C#获取本地计算机名,IP,MAC地址
- (原创)C#编写的windows计算器----源代码
- 用Web标准进行开发
- 转贴:编程修养(五)