java做曲线图柱状图数据统计.docx

上传人:b****9 文档编号:25297401 上传时间:2023-06-07 格式:DOCX 页数:26 大小:38.62KB
下载 相关 举报
java做曲线图柱状图数据统计.docx_第1页
第1页 / 共26页
java做曲线图柱状图数据统计.docx_第2页
第2页 / 共26页
java做曲线图柱状图数据统计.docx_第3页
第3页 / 共26页
java做曲线图柱状图数据统计.docx_第4页
第4页 / 共26页
java做曲线图柱状图数据统计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

java做曲线图柱状图数据统计.docx

《java做曲线图柱状图数据统计.docx》由会员分享,可在线阅读,更多相关《java做曲线图柱状图数据统计.docx(26页珍藏版)》请在冰豆网上搜索。

java做曲线图柱状图数据统计.docx

java做曲线图柱状图数据统计

 

如何引用jar包

project--->projectproperties--->左侧选择path--->右侧选择requiredlibraries--->add--->archives,然后找到你要导入的包,点击OK即可

 

JFREECHARTDOCUMENT

JFreeChart核心对象类介绍

类名

类的作用以及简单描述

JFreeChart

图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。

JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象

XXXXXDataset

数据集对象,用于提供显示图表所用的数据。

根据不同类型的图表对应着很多类型的数据集对象类

XXXXXPlot

图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持

XXXXXAxis

用于处理图表的两个轴:

纵轴和横轴

XXXXXRenderer

负责如何显示一个图表对象

XXXXXURLGenerator

用于生成Web图表中每个项目的鼠标点击链接

XXXXXToolTipGenerator

用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

下面以柱状图和饼图以及折线图为例,介绍图形创建方法。

1)柱状图

org.jfree.chart.ChartFactory这个工厂类有

createBarChart、

createStackedBarChart、

createBarChart3D、

createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,比较重要的是PlotOrientation.VERTICAL让平行柱垂直显示,而PlotOrientation.HORIZONTAL则让平行柱水平显示。

对柱状图影响较大的几个类包括:

org.jfree.chart.axis.CategoryAxis、

org.jfree.chart.axis.ValueAxis、

org.jfree.chart.renderer.BarRenderer、

org.jfree.chart.renderer.BarRenderer3D。

具体实现步骤:

(1)创建用于图形生成所要的数据集对象。

CategoryDatasetdataset=DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);

其中:

rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充柱状图所要的实际数据(来自于数据库)。

(2)创建图形对象。

JFreeChartchart=ChartFactory.createBarChart3D(

"标题",//图形的标题

null,//X轴标题

null,//Y轴标题

dataset,//数据

PlotOrientation.VERTICAL,,//图表方向

true,//是否显示图例

false,//启用热键

false)//启用超键接

createBarChart3D方法是ChartFactory工厂类里的一个方法,用于3D柱状图的生成,该类继承自JFreeChart。

(3)设置图形显示的属性

a)ValueAxis类,设置柱到图上下边的距离。

实现方法是:

ValueAxisrangeAxis=plot.getRangeAxis();

设置最高的一个柱与图片顶端的距离:

rangeAxis.setUpperMargin(0.15)

设置最低的一个柱与图片底端的距离:

rangeAxis.setLowerMargin(0.15)

b)org.jfree.chart.renderer.BarRenderer3D类,设置图形上显示的数值。

实现方法如下:

BarRenderer3Drenderer=newBarRenderer3D();

renderer.setBaseOutlinePaint(Color.BLACK);

设置Wall的颜色:

renderer.setWallPaint(Color.gray);

设置每个柱的颜色:

renderer.setSeriesPaint(0,newColor(0,0,255));

renderer.setSeriesPaint(1,newColor(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(newStandardCategoryItemLabelGenerator());

renderer.setItemLabelFont(newFont("黑体",Font.PLAIN,12));

renderer.setItemLabelsVisible(true);

为图形加入超连接

renderer.setItemURLGenerator(newStandardCategoryURLGenerator());

renderer.setToolTipGenerator(newStandardCategoryToolTipGenerator());

柱状图DEMO:

packagecom.cons.jfreechart;

importjava.awt.Color;

importjava.io.File;

importjava.io.FileOutputStream;

importorg.jfree.chart.ChartFactory;

importorg.jfree.chart.ChartPanel;

importorg.jfree.chart.ChartRenderingInfo;

importorg.jfree.chart.ChartUtilities;

importorg.jfree.chart.JFreeChart;

importorg.jfree.chart.axis.NumberAxis3D;

importorg.jfree.chart.entity.StandardEntityCollection;

importorg.jfree.chart.plot.CategoryPlot;

importorg.jfree.chart.plot.PlotOrientation;

importorg.jfree.chart.plot.XYPlot;

importorg.jfree.chart.renderer.category.BarRenderer;

importorg.jfree.chart.renderer.category.BarRenderer3D;

importorg.jfree.chart.renderer.xy.XYBarRenderer;

importorg.jfree.chart.renderer.xy.XYItemRenderer;

importorg.jfree.data.category.CategoryDataset;

importorg.jfree.data.category.DefaultCategoryDataset;

importorg.jfree.ui.ApplicationFrame;

importorg.jfree.ui.RefineryUtilities;

publicclassBarChartDemoextendsApplicationFrame{

publicBarChartDemo(){

super("");

}

/**

*获取一个演示用的简单数据集对象

*@return

*/

privatestaticCategoryDatasetgetDataSet(){

DefaultCategoryDatasetdataset=newDefaultCategoryDataset();

dataset.addValue(100,null,"苹果");

dataset.addValue(200,null,"梨子");

dataset.addValue(300,null,"葡萄");

dataset.addValue(400,null,"香蕉");

dataset.addValue(500,null,"荔枝");

returndataset;

}

/**

*获取一个演示用的组合数据集对象

*@return

*/

privatestaticCategoryDatasetgetDataSet2(){

DefaultCategoryDatasetdataset=newDefaultCategoryDataset();

dataset.addValue(100,"北京","苹果");

dataset.addValue(100,"上海","苹果");

dataset.addValue(100,"广州","苹果");

dataset.addValue(200,"北京","梨子");

dataset.addValue(200,"上海","梨子");

dataset.addValue(200,"广州","梨子");

dataset.addValue(300,"北京","葡萄");

dataset.addValue(300,"上海","葡萄");

dataset.addValue(300,"广州","葡萄");

dataset.addValue(400,"北京","香蕉");

dataset.addValue(400,"上海","香蕉");

dataset.addValue(400,"广州","香蕉");

dataset.addValue(500,"北京","荔枝");

dataset.addValue(500,"上海","荔枝");

dataset.addValue(500,"广州","荔枝");

returndataset;

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

CategoryDatasetdataset=getDataSet2();

JFreeChartchart=ChartFactory.createBarChart3D(

"水果产量图",//图表标题

"水果",//目录轴的显示标签

"产量",//数值轴的显示标签

dataset,//数据集

PlotOrientation.VERTICAL,//图表方向:

水平、垂直

true,//是否显示图例(对于简单的柱状图必须是false)

false,//是否生成工具

false//是否生成URL链接

);

CategoryPlotplot=chart.getCategoryPlot();

BarRenderer3Drenderer3D=(BarRenderer3D)plot.getRenderer();

//BarRenderer3Drenderer3D=newBarRenderer3D();

renderer3D.setSeriesPaint(0,Color.ORANGE);//设置柱子的颜色

renderer3D.setSeriesPaint(1,Color.RED);

renderer3D.setSeriesPaint(2,Color.BLACK);

//NumberAxis3DnumberAxis3D=(NumberAxis3D)plot.getRangeAxis();

//numberAxis3D.setStandardTickUnits(NumberAxis3D.createIntegerTickUnits());

ChartPanelchartPanel=newChartPanel(chart);

chartPanel.setPreferredSize(newjava.awt.Dimension(500,270));

Filefos_jpg=null;

FileOutputStreamoutputStream=null;

ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection());

try{

fos_jpg=newFile("D:

\\fruite.jpg");

outputStream=newFileOutputStream("D:

\\fruite1.jpg");

ChartUtilities.saveChartAsJPEG(fos_jpg,chart,500,270);

ChartUtilities.writeChartAsJPEG(outputStream,chart,500,270);

outputStream.close();

}catch(Exceptione){

//TODO:

handleexception

}

BarChartDemobarChartDemo=newBarChartDemo();

barChartDemo.pack();

barChartDemo.add(chartPanel);

RefineryUtilities.centerFrameOnScreen(barChartDemo);

barChartDemo.setVisible(true);

}

}

注意:

3D的柱状图和2D的柱状图做法是一样的,如果纯粹画图就不要继承ApplicationFrame

2)饼图

具体实现步骤:

1)创建用于图形生成所要的数据集对象。

首先实例化类DefaultPieDatasetdataset=newDefaultPieDataset()。

然后利用DefaultPieDataset类提供的setValue(value1,value2)方法,把从数据库里提取的数据存入DefaultPieDataset对象。

其中value1是数据名称、value2是数据值。

2)创建图形对象。

首先实例化JFreeChartchart=ChartFactory.createPieChart3D(title,

dataset,

true,

true,

false)

createPieChart3D方法是用于饼图生成的主要方法。

其中title代表图形的标题、

dataset就是DefaultPieDataset对象的实例。

3)设置图形显示的属性。

Stringfilename=ServletUtilities.saveChartAsPNG(jFreeChart,700,450,info,session);

ChartUtilities.writeImageMap(pw,filename,info);

pw.flush()

saveChartAsPNG方法在ServletUtilities工厂类定义完成。

主要用于把图形对象JFreeChart以图片的形式保存。

其中的jFreeChart就是

JFreeChart对象的实例。

该方法返回一个文件名。

writeImageMap(pw,filename,info)方法用于把保存的图片文件以字节流的形式写入用户界面。

其中pw是java.io包的PrintWriter类的实例对象,该对象创建一个图形输出流。

Filename是输出图片的文件名。

该文件名来自ServletUtilities.saveChartAsPNG方法创建。

参数info用于图形信息的显示。

用ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection())创建。

最后输出完成图形,调用pw.flush()方法关闭IO流。

packagecom.cons.jfreechart;

importjava.awt.Color;

importjava.awt.Font;

importjava.io.*;

importorg.jfree.data.general.DefaultPieDataset;

importorg.jfree.chart.*;

importorg.jfree.chart.plot.PiePlot3D;

publicclassPieChartDemo{

/**

*获取一个演示用的简单数据集对象

*@return

*/

privatestaticDefaultPieDatasetgetDataSet(){

DefaultPieDatasetdataset=newDefaultPieDataset();

dataset.setValue("苹果",100);

dataset.setValue("梨子",200);

dataset.setValue("葡萄",300);

dataset.setValue("香蕉",400);

dataset.setValue("荔枝",500);

returndataset;

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

DefaultPieDatasetdata=getDataSet();

JFreeChartchart=ChartFactory.createPieChart3D("水果产量图",//图表标题

data,

true,//是否显示图例

false,

false

);

PiePlot3DpiePlot3D=(PiePlot3D)chart.getPlot();

//piePlot3D.setLabelGap(0.02D);

//piePlot3D.setCircular(true);//设置是否以圆型来显示

piePlot3D.setLabelFont(newFont("SansSerif",3,12));//设置字体

piePlot3D.setSectionOutlinePaint(Color.BLACK);//设置轮廓线颜色

//piePlot3D.setSectionOutlineStroke(piePlot3D.DEFAULT_LABEL_OUTLINE_STROKE);

piePlot3D.setSectionOutlinesVisible(false);

//piePlot3D.setNoDataMessage("Nodataavailable");

//写图表对象到文件,参照柱状图生成源码

Filefile=newFile("D:

/pieFruite.jpg");

try{

ChartUtilities.saveChartAsJPEG(file,chart,500,270);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

3)折线图

折线图的dataset两种CatagoryDataset接口(具体实现类是DefaultCategoryDataset),XYDataset接口体实现步骤:

1、首先实例化类XYSeriesfirdtSeries=newXYSeries(“线的名称”);然后利用XYSeries类提供的add(value1,value2)方法,把从数据库里提取的数据存入XYSeries对象。

其中value1是数据名称、value2是数据值。

然后实例化XYSeriesCollectioncollection=newXYSeriesCollection();最后返回collection

2、创建图形对象。

//createthechart...

JFreeChartchart=ChartFactory.createXYLineChart(

title,//charttitle(图表标题)

"X",//xaxislabel(横坐标名称)

"Y",//yaxislabel(纵坐标名称)

dataset,//data(数据)

PlotOrientation.VERTICAL,//图表方向(水平、垂直)

true,//includelegend(是否显现图例)

true,//tooltips

true//urls

);

3、保存显示图片

fileName=ServletUtilities.saveChartAsJPEG(chart,500,270,info,session);

ChartUtilities.writeImageMap(print,fileName,info,true);

print.flush();

注:

info,ChartRenderingInfoinfo=newChartRenderingInfo(newStandardEntityCollection());

print,PrintWriter

例子:

/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1