java做曲线图柱状图数据统计13页文档资料Word文档格式.docx
《java做曲线图柱状图数据统计13页文档资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《java做曲线图柱状图数据统计13页文档资料Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要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;
*获取一个演示用的组合数据集对象
privatestaticCategoryDatasetgetDataSet2(){
dataset.addValue(100,"
北京"
"
上海"
广州"
dataset.addValue(200,"
dataset.addValue(300,"
dataset.addValue(400,"
dataset.addValue(500,"
*@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("
\\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,
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流。
importjava.awt.Font;
importjava.io.*;
importorg.jfree.data.general.DefaultPieDataset;
importorg.jfree.chart.*;
importorg.jfree.chart.plot.PiePlot3D;
publicclassPieChartDemo{
privatestaticDefaultPieDatasetgetDataSet(){
DefaultPieDatasetdataset=newDefaultPieDataset();
dataset.setValue("
100);
200);
300);
400);
500);
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("
/pieFruite.jpg"
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对象。
然后实例化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、保存显示图片