java利用JFreeChart实现各种数据统计图(柱形图饼图折线图)_第1页
java利用JFreeChart实现各种数据统计图(柱形图饼图折线图)_第2页
java利用JFreeChart实现各种数据统计图(柱形图饼图折线图)_第3页
java利用JFreeChart实现各种数据统计图(柱形图饼图折线图)_第4页
java利用JFreeChart实现各种数据统计图(柱形图饼图折线图)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、各类统计程序实现 杨方 531115121 矢量图的生成矢量统计图,即是以矢量图形格式生成、存在和输出的统计图。这种统计图图形要素丰富、交互编辑简单、存储格式多样,打印输出方便,是GIS应用系统最优先选择的统计图。最常用的三类矢量统计图是直方图、曲线图、饼图。矢量统计图的生成,首先要将数据组织为一定的格式,然后进行图形参数的计算和设置,再生成图形,最后进行浏览显示或者保存输出。当然,如果对生成的图形不满意,可以进行参数修改,然后重新生成,最后再显示或保存。1.1 数据组织原始数据可以整理为二维表格的形式,通过文件(*.txt,*.xls,*.doc)导入,也可以将数据整理为二维数组的形式输入。

2、统计图只支持为数值型的数据,包括整型、长整型、浮点型和双精度型等4种数据类型。 1.2 设置参数图形参数可以由用户外部输入,也可以根据数据生成默认参数,分为基本参数、坐标参数、图例参数和数据参数等。(1)基本参数包括图形类型,图形名称,图形范围,点、线、区参数等。(2)坐标轴参数包括是否绘制轴线、刻度线、标注、网格线的标志,刻度数,颜色,名称,比例尺,以及是否绘制包围盒或箭头的标志。(3)图例参数包括是否绘制图例的标志和图例显示位置标志。(4)数据参数包括数据类型,是否绘制数据表的标志,图形单元的宽度或间隔、图形单元的颜色,系列和类别显示标志等。1.3 图形生成生成图形的基本步骤如下:(1)确

3、认存在点、线、面工作区。生成的图形要暂时存入工作区中,然后才能进行显示或保存。点线面工作区可以由外部输入,也可以在软件中生成。(2)确认各项图形参数有效。必须保证每项图形参数都有效,否则软件将出错。对于没有设置有效值的参数,要重新设置默认参数。(3)依次生成图形的各个要素:生成坐标轴、生成图形主体、生成数据表、生成图例和生成图形。在生成统计图的过程中,要随时计算图形的当前范围,以控制后续元素的位置。1.4 图形显示统计图生成后,保存在MAPGIS的点线面工作区中,可以调用MAPGIS的图形显示视图进行显示。先将生成的MAPGIS点线面工作区临时保存为MAPGIS工程,然后在MAPGIS的图形显

4、示视图进行显示。1.5 图形输出统计图生成后,也可以直接进行输出:(1)保存为MAPGIS工程文件,直接将MAPGIS点线面工作区保存为MAPGIS工程文件。该文件可以调用MAPGIS图形编辑系统进行编辑。(2)保存为图片格式,如JPEG、GIF、TIF等。保存之前必须先设置好图形的页面范围,以免图形保存不够完整或错位。2 实现应用2.1 软件包实现2.1.1 类与结构主要的类和对象有:(1) 统计图基类,初始化图形参数,生成坐标轴、图例、图形名称、数据表等要素。(2)直方图类,生成直方图,继承统计图基类。(3)曲线图类,生成曲线图,继承统计图基类。(4),饼图类,生成饼图,继承统计图基类。(

5、5)图形参数结构,包括坐标轴参数、图例参数、图形名称等参数。(6)坐标轴参数结构。(7)图例参数结构。(8)圆弧参数结构,在饼图中使用。实现流程图统计图 曲线图直方图饼形图柱形图设置参数数据参数图例参数坐标参数基本参数java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)二, 实现柱形图的java代码: import java.awt.Font;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import

6、org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;public class BarChart ChartPanel frame1;pu

7、blic BarChart()CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D( "水果", / 图表标题 "水果种类", / 目录轴的显示标签 "数量", / 数值轴的显示标签 dataset, / 数据集 PlotOrientation.VERTICAL, / 图表方向:水平、垂直 true, / 是否显示图例(对于简单的柱状图必须是false) false, / 是否生成工具 false / 是否生成U

8、RL链接 ); /从这里开始 CategoryPlot plot=chart.getCategoryPlot();/获取图表区域对象 CategoryAxis domainAxis=plot.getDomainAxis(); /水平底部列表 domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14); /水平底部标题 domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12); /垂直标题 ValueAxis rangeAxis=plot.getRangeAx

9、is();/获取柱状 rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15); chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15); chart.getTitle().setFont(new Font("宋体",Font.BOLD,20);/设置标题字体 /到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题 frame1=new ChartPanel(chart,true); /这里也可以用chartFrame,

10、可以直接生成一个独立的Frame private static CategoryDataset getDataSet() DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.add

11、Value(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州"

12、, "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); datase

13、t.addValue(500, "广州", "荔枝"); return dataset;public ChartPanel getChartPanel()return frame1; 效果图如下: 但我们把private static CategoryDataset getDataSet()方法中的数据变化一下后,又会形成另一种效果,比如说我们改成:private static CategoryDataset getDataSet() DefaultCategoryDataset dataset = new Def

14、aultCategoryDataset(); dataset.addValue(100, "苹果", "苹果"); dataset.addValue(200, "梨子", "梨子"); dataset.addValue(300, "葡萄", "葡萄"); dataset.addValue(400, "香蕉", "香蕉"); dataset.addValue(500, "荔枝", "荔枝"); re

15、turn dataset; 效果图如下: 三,    实现饼状图的java代码: package com.njue.testJFreeChart;import java.awt.Font;import java.text.DecimalFormat;import java.text.NumberFormat;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.ch

16、art.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.data.general.DefaultPieDataset;public class PieChart ChartPanel frame1;public PieChart() DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie

17、Chart3D("水果产量",data,true,false,false); /设置百分比 PiePlot pieplot = (PiePlot) chart.getPlot(); DecimalFormat df = new DecimalFormat("0.00%");/获得一个DecimalFormat对象,主要是设置小数问题 NumberFormat nf = NumberFormat.getNumberInstance();/获得一个NumberFormat对象 StandardPieSectionLabelGenerator sp1 = ne

18、w StandardPieSectionLabelGenerator("0 2", nf, df);/获得StandardPieSectionLabelGenerator对象 pieplot.setLabelGenerator(sp1);/设置饼图显示百分比 /没有数据的时候显示的内容 pieplot.setNoDataMessage("无数据显示"); pieplot.setCircular(false); pieplot.setLabelGap(0.02D); pieplot.setIgnoreNullValues(true);/设置不显示空值 pi

19、eplot.setIgnoreZeroValues(true);/设置不显示负值 frame1=new ChartPanel (chart,true); chart.getTitle().setFont(new Font("宋体",Font.BOLD,20);/设置标题字体 PiePlot piePlot= (PiePlot) chart.getPlot();/获取图表区域对象 piePlot.setLabelFont(new Font("宋体",Font.BOLD,10);/解决乱码 chart.getLegend().setItemFont(new

20、Font("黑体",Font.BOLD,10); private static DefaultPieDataset getDataSet() DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setVal

21、ue("荔枝",500); return dataset; public ChartPanel getChartPanel() return frame1;  效果图如下: 四,      实现折线图的java代码: package com.njue.testJFreeChart;import java.awt.Font;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jf

22、ree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.ValueAxis;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

23、.data.xy.XYDataset;public class TimeSeriesChart ChartPanel frame1;public TimeSeriesChart()XYDataset xydataset = createDataset();JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Legal & General单位信托基金价格", "日期", "价格",xydataset, true, true, true);XYPlot xyplo

24、t = (XYPlot) jfreechart.getPlot();DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis(); dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"); frame1=new ChartPanel(jfreechart,true); dateaxis.setLabelFont(new Font("黑体",Font.BOLD,14); /水平底部标题 dateaxis.setTickLabelFont(n

25、ew Font("宋体",Font.BOLD,12); /垂直标题 ValueAxis rangeAxis=xyplot.getRangeAxis();/获取柱状 rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15); jfreechart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15); jfreechart.getTitle().setFont(new Font("宋体",Font.BOLD,20);/设

26、置标题字体 private static XYDataset createDataset() /这个数据集有点多,但都不难理解 TimeSeries timeseries = new TimeSeries("legal & general欧洲指数信任", org.jfree.data.time.Month.class); timeseries.add(new Month(2, 2001), 181.80000000000001D); timeseries.add(new Month(3, 2001), 167.30000000000001D); timeseries

27、.add(new Month(4, 2001), 153.80000000000001D); timeseries.add(new Month(5, 2001), 167.59999999999999D); timeseries.add(new Month(6, 2001), 158.80000000000001D); timeseries.add(new Month(7, 2001), 148.30000000000001D); timeseries.add(new Month(8, 2001), 153.90000000000001D); timeseries.add(new Month(

28、9, 2001), 142.69999999999999D); timeseries.add(new Month(10, 2001), 123.2D); timeseries.add(new Month(11, 2001), 131.80000000000001D); timeseries.add(new Month(12, 2001), 139.59999999999999D); timeseries.add(new Month(1, 2002), 142.90000000000001D); timeseries.add(new Month(2, 2002), 138.69999999999

29、999D); timeseries.add(new Month(3, 2002), 137.30000000000001D); timeseries.add(new Month(4, 2002), 143.90000000000001D); timeseries.add(new Month(5, 2002), 139.80000000000001D); timeseries.add(new Month(6, 2002), 137D); timeseries.add(new Month(7, 2002), 132.80000000000001D); TimeSeries timeseries1

30、= new TimeSeries("legal & general英国指数信任", org.jfree.data.time.Month.class); timeseries1.add(new Month(2, 2001), 129.59999999999999D); timeseries1.add(new Month(3, 2001), 123.2D); timeseries1.add(new Month(4, 2001), 117.2D); timeseries1.add(new Month(5, 2001), 124.09999999999999D); time

31、series1.add(new Month(6, 2001), 122.59999999999999D); timeseries1.add(new Month(7, 2001), 119.2D); timeseries1.add(new Month(8, 2001), 116.5D); timeseries1.add(new Month(9, 2001), 112.7D); timeseries1.add(new Month(10, 2001), 101.5D); timeseries1.add(new Month(11, 2001), 106.09999999999999D); timeseries1.add(new Month(12, 2001), 110.3D); timeseries1.add(new Month(1, 2002), 111.7D); t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论