java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖_第1頁
java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖_第2頁
java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖_第3頁
java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖_第4頁
java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

./java實現(xiàn)各種數(shù)據(jù)統(tǒng)計圖〔柱形圖,餅圖,折線圖分類:

Java2012-05-2422:28

22644人閱讀

評論<29>

收藏\o"舉報"舉報javajfreechartdatasetapplicationclassproperties最近在做數(shù)據(jù)挖掘的課程設計,需要將數(shù)據(jù)分析的結果很直觀的展現(xiàn)給用戶,這就要用到數(shù)據(jù)統(tǒng)計圖,要實現(xiàn)這個功能就需要幾個第三方包了:3.

gnujaxp.jar先來看一下,最終效果圖:主要是,但這三個包要齊全,我已經(jīng)將所有與jfreechart有關的jar包與本文實例的工程〔代碼一同壓縮上傳了,有興趣的同學可以下載,下載地址:接下來,我們一步步來實現(xiàn)本程序。一,前期準備工作,也就把這三個第三方包添加進本文工程,添加過程特別簡單,前面寫過一篇博客,講的是java如何讀取Excel表格中的數(shù)據(jù)〔有興趣的同學可以看一看:,也要添加第三方包,添加過程一模一樣,這里我們在復習一遍:1,建,立java項目,在這個項目在建立一個新的文件夾lib;2,將上述三個jar包,復制到lib3,然后右鍵點擊這個java項目,選擇Properties4,在左側列表里選中JavaBuildPath,右側選中Libraries5,點擊AddJARs6,然后去選擇這個項目中l(wèi)ib文件夾中的三個jar,點擊確定成功后,項目中會多一個文件夾為:ReferencedLibraries二,實現(xiàn)柱形圖的java代碼:[plain]viewplaincopy

import

java.awt.Font;

import

org.jfree.chart.ChartFactory;

import

org.jfree.chart.ChartPanel;

import

org.jfree.chart.JFreeChart;

import

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;

public

BarChart<>{

CategoryDataset

dataset

=

getDataSet<>;

JFreeChart

chart

=

ChartFactory.createBarChart3D<

"水果",

//

圖表標題

"水果種類",

//

目錄軸的顯示標簽

"數(shù)量",

//

數(shù)值軸的顯示標簽

dataset,

//

數(shù)據(jù)集

PlotOrientation.VERTICAL,

//

圖表方向:水平、垂直

true,

//

是否顯示圖例<對于簡單的柱狀圖必須是false>

false,

//

是否生成工具

false

//

是否生成URL

>;

//從這里開始

CategoryPlot

plot=chart.getCategoryPlot<>;//獲取圖表區(qū)域對象

CategoryAxis

domainAxis=plot.getDomainAxis<>;

//水平底部列表

domainAxis.setLabelFont<new

Font<"黑體",Font.BOLD,14>>;

//水平底部標題

domainAxis.setTickLabelFont<new

Font<"宋體",Font.BOLD,12>>;

//垂直標題

ValueAxis

rangeAxis=plot.getRangeAxis<>;//獲取柱狀

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,可以直接生成一個獨立的Frame

}

private

static

CategoryDataset

getDataSet<>

{

DefaultCategoryDataset

dataset

=

new

DefaultCategoryDataset<>;

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,

"",

"荔枝">;

return

dataset;

}

public

ChartPanel

getChartPanel<>{

return

frame1;

}

}

效果圖如下:但我們把private

static

CategoryDatasetgetDataSet<>{}方法中的數(shù)據(jù)變化一下后,又會形成另一種效果,比如說我們改成:[plain]viewplaincopyprivate

static

CategoryDataset

getDataSet<>

{

DefaultCategoryDataset

dataset

=

new

DefaultCategoryDataset<>;

dataset.addValue<100,

"蘋果",

"蘋果">;

dataset.addValue<200,

"梨子",

"梨子">;

dataset.addValue<300,

"葡萄",

"葡萄">;

dataset.addValue<400,

"香蕉",

"香蕉">;

dataset.addValue<500,

"荔枝",

"荔枝">;

return

dataset;

}

效果圖如下:三,實現(xiàn)餅狀圖的java代碼:[plain]viewplaincopy

package

.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.chart.JFreeChart;

import

org.jfree.chart.labels.StandardPieSectionLabelGenerator;

import

org.jfree.chart.plot.PiePlot;

al.DefaultPieDataset;

public

class

PieChart

{

ChartPanel

frame1;

public

PieChart<>{

DefaultPieDataset

data

=

getDataSet<>;

JFreeChart

chart

=

ChartFactory.createPieChart3D<"水果產(chǎn)量",data,true,false,false>;

//設置百分比

PiePlot

pieplot

=

<PiePlot>

chart.getPlot<>;

DecimalFormat

df

=

new

DecimalFormat<"0.00%">;//獲得一個DecimalFormat對象,主要是設置小數(shù)問題

NumberFormat

nf

=

NumberFormat.getNumberInstance<>;//獲得一個NumberFormat對象

StandardPieSectionLabelGenerator

sp1

=

new

StandardPieSectionLabelGenerator<"{0}

{2}",

nf,

df>;//獲得StandardPieSectionLabelGenerator對象

pieplot.setLabelGenerator<sp1>;//設置餅圖顯示百分比

//沒有數(shù)據(jù)的時候顯示的容

pieplot.setNoDataMessage<"無數(shù)據(jù)顯示">;

pieplot.setCircular<false>;

pieplot.setLabelGap<0.02D>;

pieplot.setIgnoreNullValues<true>;//設置不顯示空值

pieplot.setIgnoreZeroValues<true>;//設置不顯示負值

frame1=new

ChartPanel

<chart,true>;

chart.getTitle<>.setFont<new

Font<"宋體",Font.BOLD,20>>;//設置標題字體

PiePlot

piePlot=

<PiePlot>

chart.getPlot<>;//獲取圖表區(qū)域對象

piePlot.setLabelFont<new

Font<"宋體",Font.BOLD,10>>;//解決亂碼

chart.getLegend<>.setItemFont<new

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.setValue<"荔枝",500>;

return

dataset;

}

public

ChartPanel

getChartPanel<>{

return

frame1;

}

}

效果圖如下:四,實現(xiàn)折線圖的java代碼:[plain]viewplaincopypackage

.njue.testJFreeChart;

import

java.awt.Font;

import

java.text.SimpleDateFormat;

import

org.jfree.chart.ChartFactory;

import

org.jfree.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.data.xy.XYDataset;

public

class

TimeSeriesChart

{

ChartPanel

frame1;

public

TimeSeriesChart<>{

XYDataset

xydataset

=

createDataset<>;

JFreeChart

jfreechart

=

ChartFactory.createTimeSeriesChart<"Legal

&

General單位信托基金價格",

"日期",

"價格",xydataset,

true,

true,

true>;

XYPlot

xyplot

=

<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<new

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>>;//設置標題字體

}

private

static

XYDataset

createDataset<>

{

//這個數(shù)據(jù)集有點多,但都不難理解

TimeSeries

timeseries

=

new

TimeSeries<"legal

&

general歐洲指數(shù)信任",

org.jfree.data.time.Month.class>;

timeseries.add<new

Month<2,

2001>,

181.001D>;

timeseries.add<new

Month<3,

2001>,

167.001D>;

timeseries.add<new

Month<4,

2001>,

153.001D>;

timeseries.add<new

Month<5,

2001>,

167.999D>;

timeseries.add<new

Month<6,

2001>,

158.001D>;

timeseries.add<new

Month<7,

2001>,

148.001D>;

timeseries.add<new

Month<8,

2001>,

153.001D>;

timeseries.add<new

Month<9,

2001>,

142.999D>;

timeseries.add<new

Month<10,

2001>,

123.2D>;

timeseries.add<new

Month<11,

2001>,

131.001D>;

timeseries.add<new

Month<12,

2001>,

139.999D>;

timeseries.add<new

Month<1,

2002>,

142.001D>;

timeseries.add<new

Month<2,

2002>,

138.999D>;

timeseries.add<new

Month<3,

2002>,

137.001D>;

timeseries.add<new

Month<4,

2002>,

143.001D>;

timeseries.add<new

Month<5,

2002>,

139.001D>;

timeseries.add<new

Month<6,

2002>,

137D>;

timeseries.add<new

Month<7,

2002>,

132.001D>;

TimeSeries

timeseries1

=

new

TimeSeries<"legal

&

general英國指數(shù)信任",

org.jfree.data.time.Month.class>;

timeseries1.add<new

Month<2,

2001>,

129.999D>;

timeseries1.add<new

Month<3,

2001>,

123.2D>;

timeseries1.add<new

Month<4,

2001>,

117.2D>;

timeseries1.add<new

Month<5,

2001>,

124.999D>;

timeseries1.add<new

Month<6,

2001>,

122.999D>;

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.999D>;

timeseries1.add<new

Month<12,

2001>,

110.3D>;

timeseries1.add<new

Month<1,

2002>,

111.7D>;

timeseries1.add<new

Month<2,

2002>,

111D>;

timeseries1.add<new

Month<3,

2002>,

109.999D>;

timeseries1.add<new

Month<4,

2002>,

113.2D>;

timeseries1.add<new

Month<5,

2002>,

111.999D>;

timeseries1.add<new

Month<6,

2002>,

108.8D>;

timeseries1.add<new

Month<7,

2002>,

101.999D>;

TimeSeriesCollection

timeseriescollection

=

new

TimeSeriesCollection<>;

timeseriescollection.addSeries<timeseries>;

timeseriescollection.addSeries<timeseries1>;

return

timeseriescollection;

}

public

ChartPanel

getChartPanel<>{

return

frame1;

}

}

效果圖如下:再來看一下主方法:[plain]viewplaincopyimport

java.awt.GridLayout;

import

javax.swing.JFrame;

public

class

mainClass

{

public

static

void

main<String

args[]>{

JFrame

frame=new

JFrame<"Java數(shù)據(jù)統(tǒng)計圖">;

frame.setLayout<new

GridLayout<2,2,10,10>>;

frame.add<new

BarChart<>.getChartPanel<>>;

//添加柱形圖

frame.add<new

BarChart1<>.getChartPanel<>>;

//添加柱形圖的另一種效果

frame.add<new

PieChart<>.getChartPanel<>>;

//添加餅狀圖

frame.add<new

TimeSeriesChart<>.getChartPanel<>>;

//添加折線圖

frame.setBounds<50,

50,

800,

600>;

frame.setVisible<true>;

}

}

五,總結以上都是一個簡單的例子去實現(xiàn)了,想了解更深的同學可自行查詢資料,其實以上代碼都通俗易懂,只要結合自己的實際情況,便可開發(fā)出屬于自己的Application,大家可以看出我這里是在Application上實現(xiàn)的,其實更多情況數(shù)據(jù)統(tǒng)計圖在javaweb上應用更多,大家也可自行了解。ps:如運行本文工程項目是出現(xiàn)錯誤,請參考博文:JFreeChart入學教程2011-08-0814:55:19|

分類:技術篇|舉報|字號訂閱JFreeChart是一組功能強大、靈活易用的Java繪圖API,使用它可以生成多種通用性的報表,包括柱狀圖、餅圖、曲線圖、甘特圖等。它能夠用在Swing和Web等中制作自定義的圖表或報表,并且得到廣泛的應用。本文將通過引領讀者學習在JFreeChart中餅圖、柱狀圖和曲線圖的進階應用,來達到熟練使用JFreeChart的目的。

一.下載與環(huán)境配置

1.下載JFreeChart

JFreeChart是開放源代碼的免費軟件,但是它的支持文檔需要付費才能得到。其下載地址為:/project/showfiles.php?group_id=15494,當前最新版本為1.0.13。筆者下載的是1.0.13最新版。

說明:1source目錄:為jfreechart的源碼目錄;

2lib目錄:為包目錄,我們需要關注的包為jfreechart-1.0.13.jar、gnujaxp.jar和jcommon-1.0.16.jar這三個包;

3根目錄下的jfreechart-1.0.13-demo.jar是例子程序,大家雙擊后可看到其中有很多例子的運行結果。

2.環(huán)境配置

筆者的開發(fā)環(huán)境如下:

JDK:1.6

MyEclipse:6.6

Tomcat:6.0.18

為了后續(xù)的"用JFreeChart創(chuàng)建基于Web的圖表"的一個例子的展示,我們在MyEclipse中創(chuàng)建一個名為jfreechart的Web工程。將下載的JFreeChart1.0.6下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>

二.

柱狀圖

在WebRoot目錄下建立bar目錄,用來存放柱狀圖的各個例子。首先在該目錄下建立一個sample1.jsp文件,讓我們來看一個簡單的柱狀圖的例子,修改后的sample1.jsp的容如下所示:

<%pagecontentType="text/html;charset=GBK"%><%pageimport="org.jfree.chart.ChartFactory,

org.jfree.chart.JFreeChart,

org.jfree.chart.plot.PlotOrientation,

org.jfree.chart.servlet.ServletUtilities,

org.jfree.data.category.DefaultCategoryDataset"%><%

DefaultCategoryDatasetdataset=newDefaultCategoryDataset<>;

dataset.addValue<610,"Guangzhou","Pig">;

dataset.addValue<220,"Guangzhou","Beef">;

dataset.addValue<530,"Guangzhou","Chicken">;

dataset.addValue<340,"Guangzhou","Fish">;JFreeChartchart=ChartFactory.createBarChart3D<"肉類銷量統(tǒng)計圖",

"type",

"amount",

dataset,

PlotOrientation.VERTICAL,

false,

false,

false>;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,500,300,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=500height=300border=0usemap="#<%=filename%>">

在瀏覽器中輸入地址:localhost:8080/jfreechart/bar/sample1.jsp,可看到如下柱狀圖:

上面的這個柱狀圖比較簡單,稍顯單調,在有些情況下,我們需要用不同顏色來表示不同的種類,或者在種類上標上具體數(shù)值,亦或需要加上3D水晶效果。下面讓我們來做更深一步的探討。接下來讓我們看一個用不同顏色來表示不通種類的例子。在WebRoot的bar目錄下新建sample2.jsp頁面,將其代碼修改如下:

<%pagecontentType="text/html;charset=GBK"%><%pageimport="org.jfree.chart.ChartFactory,

org.jfree.chart.JFreeChart,

org.jfree.chart.plot.PlotOrientation,

org.jfree.chart.servlet.ServletUtilities,

org.jfree.data.category.CategoryDataset,

org.jfree.data.general.DatasetUtilities"%><%

double[][]data=newdouble[][]{{1310},{720},{1130},{440}};

String[]rowKeys={"pig","beef","chicken","fish"};

String[]columnKeys={""};

CategoryDatasetdataset=DatasetUtilities.createCategoryDataset<rowKeys,columnKeys,data>;

JFreeChartchart=ChartFactory.createBarChart3D<"肉類銷量統(tǒng)計圖",

"type",

"amount",

dataset,

PlotOrientation.VERTICAL,

true,

false,

false>;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,500,300,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=500height=300border=0usemap="#<%=filename%>">

該頁面的運行效果如下圖所示:

對比該例與前例,可看出createBarChart3D的倒數(shù)第三個參數(shù)修改成了true,該參數(shù)可用來顯示下方的方框。上兩例我們顯示的只是一個城市的肉類銷量,有時候我們有對比顯示多個城市的不同肉類,只要將上例稍作修改即可。例如要在圖中表示、、、四個城市的四個肉類的銷售情況,只需要將如下三句稍做修改:

double[][]data=newdouble[][]{{1310},{720},{1130},{440}};

String[]rowKeys={"pig","beef","chicken","fish"};

String[]columnKeys={""};

例如修改成:

double[][]data=newdouble[][]{{1310,1220,1110,1000},

{720,700,680,640},

{1130,1020,980,800},

{440,400,360,300}};

String[]rowKeys={"pig","beef","chicken","fish"};String[]columnKeys={"Guangzhou","Shenzhen","Dongguan","Foshan"};

在運行該jsp頁面,可看到如下界面:

在上述幾例中,在某個柱子上都沒有顯示相應的數(shù)值,下面讓我們?yōu)槊總€柱子都加上它的數(shù)值,我們新建一個sample4.jsp頁面,其容如下:

<%pagecontentType="text/html;charset=GBK"%><%pageimport="org.jfree.chart.ChartFactory,

org.jfree.chart.JFreeChart,

org.jfree.chart.plot.PlotOrientation,

org.jfree.chart.servlet.ServletUtilities,

org.jfree.data.category.CategoryDataset,

org.jfree.data.general.DatasetUtilities,

org.jfree.chart.plot.*,

org.jfree.chart.labels.*,

org.jfree.chart.renderer.category.BarRenderer3D,

java.awt.*,

org.jfree.ui.*,

org.jfree.chart.axis.AxisLocation"%><%

double[][]data=newdouble[][]{{1310,1220,1110,1000},

{720,700,680,640},

{1130,1020,980,800},

{440,400,360,300}};

String[]rowKeys={"pig","beef","chicken","fish"};

String[]columnKeys={"Guangzhou","Shenzhen","Dongguan","Foshan"};

CategoryDatasetdataset=DatasetUtilities.createCategoryDataset<rowKeys,columnKeys,data>;

JFreeChartchart=ChartFactory.createBarChart3D<"肉類銷量統(tǒng)計圖",

"type",

"amount",

dataset,

PlotOrientation.VERTICAL,

true,

true,

false>;

CategoryPlotplot=chart.getCategoryPlot<>;

//設置網(wǎng)格背景顏色

plot.setBackgroundPaint<Color.white>;

//設置網(wǎng)格豎線顏色

plot.setDomainGridlinePaint<Color.pink>;

//設置網(wǎng)格橫線顏色

plot.setRangeGridlinePaint<Color.pink>;

//顯示每個柱的數(shù)值,并修改該數(shù)值的字體屬性

BarRenderer3Drenderer=newBarRenderer3D<>;

renderer.setBaseItemLabelGenerator<newStandardCategoryItemLabelGenerator<>>;

renderer.setBaseItemLabelsVisible<true>;

//默認的數(shù)字顯示在柱子中,通過如下兩句可調整數(shù)字的顯示

//注意:此句很關鍵,若無此句,那數(shù)字的顯示會被覆蓋,給人數(shù)字沒有顯示出來的問題

renderer.setBasePositiveItemLabelPosition<newItemLabelPosition<ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT>>;

renderer.setItemLabelAnchorOffset<10D>;

//設置每個地區(qū)所包含的平行柱的之間距離

//renderer.setItemMargin<0.3>;

plot.setRenderer<renderer>;

//設置地區(qū)、銷量的顯示位置

//將下方的"肉類"放到上方

plot.setDomainAxisLocation<AxisLocation.TOP_OR_RIGHT>;

//將默認放在左邊的"銷量"放到右方

plot.setRangeAxisLocation<AxisLocation.BOTTOM_OR_RIGHT>;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,700,400,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=700height=400border=0usemap="#<%=filename%>">

運行效果如下所示:

注意:jfreechart的很多版本不兼容,請大家在運行此例時確認下載了對應的版本。

三.

餅圖

在WebRoot目錄下建立名為pie的子目錄,用來存放本教程中餅圖的實例jsp頁面。下面讓我們來看一個簡單的三維餅圖。首先在pie目錄下建立一個名為sample1.jsp的頁面。

在JFreeChart中,與餅圖繪制密切相關的類如下:

1

PiePlot

餅圖繪制類,可以用來設置餅圖的相關屬性。例如:

PiePlotpieplot=<PiePlot>jfreechart.getPlot<>;

pieplot.setLabelFont<newFont<"SansSerif",0,12>>;

pieplot.setNoDataMessage<"Nodataavailable">;

pieplot.setCircular<false>;

pieplot.setLabelGap<0.02D>;

2

DefaultPieDataset

默認的餅圖數(shù)據(jù)集類,用來存儲餅圖顯示的相關數(shù)據(jù)信息。例如:

DefaultPieDatasetdataset=newDefaultPieDataset<>;

dataset.setValue<"品德",newDouble<0.2D>>;

dataset.setValue<"體育",newDouble<0.2D>>;

dataset.setValue<"音樂",newDouble<0.2D>>;

dataset.setValue<"其余成績",newDouble<0.4D>>;

3

ChartFactory

可利用該制圖工廠類createPieChart來創(chuàng)建一個餅圖的JFreeChart對象,例如:

JFreeChartjfreechart=ChartFactory.createPieChart<"餅圖示例",dataset,true,true,false>;

下面讓我們看一個簡單的例子,修改sample1.jsp的容如下:

<%pagecontentType="text/html;charset=GBK"%>

<%pageimport="org.jfree.chart.*,

org.jfree.chart.plot.PiePlot,

org.jfree.data.general.DefaultPieDataset,

org.jfree.chart.servlet.ServletUtilities,

java.awt.*"%>

<%

//設置數(shù)據(jù)集

DefaultPieDatasetdataset=newDefaultPieDataset<>;

dataset.setValue<"初中高級程序員",0.55>;

dataset.setValue<"項目經(jīng)理",0.1>;

dataset.setValue<"系統(tǒng)分析師",0.1>;

dataset.setValue<"軟件架構師",0.1>;

dataset.setValue<"其他",0.2>;

//通過工廠類生成JFreeChart對象

JFreeChartchart=ChartFactory.createPieChart3D<"IT行業(yè)職業(yè)分布圖",dataset,true,false,false>;

PiePlotpieplot=<PiePlot>chart.getPlot<>;

pieplot.setLabelFont<newFont<"宋體",0,12>>;

//沒有數(shù)據(jù)的時候顯示的容

pieplot.setNoDataMessage<"無數(shù)據(jù)顯示">;

pieplot.setCircular<false>;

pieplot.setLabelGap<0.02D>;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,500,300,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=500height=300border=0usemap="#<%=filename%>">

可以看出,餅圖的繪制與柱狀圖的繪制類似,該例的運行效果如下:通過JFreeChart還可以提供漂亮的水晶餅圖效果,接著讓我們新建一個sample3.jsp頁面來體驗一下超炫美圖吧。修改sample3.jsp頁面如下:

<%pagecontentType="text/html;charset=GBK"%>

<%pageimport="org.jfree.chart.*,

org.jfree.chart.servlet.ServletUtilities,

org.jfree.util.Rotation,

org.jfree.data.general.DefaultPieDataset,

org.jfree.chart.plot.PiePlot3D"%>

<%

//設置數(shù)據(jù)集

DefaultPieDatasetdataset=newDefaultPieDataset<>;

dataset.setValue<"初中高級程序員",0.55>;

dataset.setValue<"項目經(jīng)理",0.1>;

dataset.setValue<"系統(tǒng)分析師",0.1>;

dataset.setValue<"軟件架構師",0.1>;

dataset.setValue<"其他",0.2>;

//通過工廠類生成JFreeChart對象

JFreeChartchart=ChartFactory.createPieChart3D<"IT行業(yè)職業(yè)分布圖",dataset,true,true,false>;

//獲得3D的水晶餅圖對象

PiePlot3Dpieplot3d=<PiePlot3D>chart.getPlot<>;

//設置開始角度

pieplot3d.setStartAngle<150D>;

//設置方向為"順時針方向"

pieplot3d.setDirection<Rotation.CLOCKWISE>;

//設置透明度,0.5F為半透明,1為不透明,0為全透明

pieplot3d.setForegroundAlpha<0.5F>;

pieplot3d.setNoDataMessage<"無數(shù)據(jù)顯示">;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,500,300,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=500height=300border=0usemap="#<%=filename%>">

利用setForegroundAlpha<>方法可以設置3D餅圖的透明度,利用setStartAngle<>可以設置其開始角度,利用setDirection<>方法可以設置其方向。該例的運行效果如下圖所示:

四.曲線圖

接著我們來介紹曲線圖的使用。在筆者日常的開發(fā)工作中,曲線圖用得最多,它可以用來繪制趨勢圖、統(tǒng)計分析等。首先我們在WebRoot下建立一個line目錄,用來存放曲線圖實例的jsp頁面。我們在該目錄下建立sample1.jsp頁面來做一個簡單的曲線圖的例子。在開始編碼前,讓我們來看看與畫曲線圖密切相關的幾個類:

1TimeSeriesCollection

曲線數(shù)據(jù)的集合。

2TimeSeries

曲線信息序列。

3ChartFactory

可以利用該類的createTimeSeriesChart方法來創(chuàng)建曲線的JFreeChart對象。

在下例中,我們顯示阿蜜果的blog在20XX度各月份的訪問量情況,修改后的sample1.jsp的容如下:

<%pagecontentType="text/html;charset=GBK"%>

<%pageimport="org.jfree.chart.ChartFactory,

org.jfree.chart.JFreeChart,

org.jfree.chart.servlet.ServletUtilities,

org.jfree.chart.title.TextTitle,

org.jfree.data.time.TimeSeries,

org.jfree.data.time.Month,

org.jfree.data.time.TimeSeriesCollection,

java.awt.Font"%>

<%

//訪問量統(tǒng)計時間線

TimeSeriestimeSeries=newTimeSeries<"阿蜜果blog訪問量統(tǒng)計",Month.class>;

//時間曲線數(shù)據(jù)集合

TimeSeriesCollectionlineDataset=newTimeSeriesCollection<>;

//構造數(shù)據(jù)集合

timeSeries.add<newMonth<1,2007>,11200>;

timeSeries.add<newMonth<2,2007>,9000>;

timeSeries.add<newMonth<3,2007>,6200>;

timeSeries.add<newMonth<4,2007>,8200>;

timeSeries.add<newMonth<5,2007>,8200>;

timeSeries.add<newMonth<6,2007>,12200>;

timeSeries.add<newMonth<7,2007>,13200>;

timeSeries.add<newMonth<8,2007>,8300>;

timeSeries.add<newMonth<9,2007>,12400>;

timeSeries.add<newMonth<10,2007>,12500>;

timeSeries.add<newMonth<11,2007>,13600>;

timeSeries.add<newMonth<12,2007>,12500>;

lineDataset.addSeries<timeSeries>;

JFreeChartchart=ChartFactory.createTimeSeriesChart<"訪問量統(tǒng)計時間線","month","visitamount",lineDataset,true,true,true>;

//設置子標題

TextTitlesubtitle=newTextTitle<"20XX度",newFont<"黑體",Font.BOLD,12>>;

chart.addSubtitle<subtitle>;

//設置主標題

chart.setTitle<newTextTitle<"阿蜜果blog訪問量統(tǒng)計",newFont<"隸書",Font.ITALIC,15>>>;

chart.setAntiAlias<true>;

Stringfilename=ServletUtilities.saveChartAsPNG<chart,500,300,null,session>;

StringgraphURL=request.getContextPath<>+"/DisplayChart?filename="+filename;

%>

<imgsrc="<%=graphURL%>"width=500height=300border=0usemap="#<%=filename%>">

運行后的曲線效果如下圖所示:

有時我們需要顯示各數(shù)據(jù)點及其數(shù)值,這是我們需要對上例進行一點改動,在JFreeChartchart=ChartFactory.createTimeSeriesChart……后,TextTitlesubtitle=newTextTitle……前加上如下的代碼:

XYPlotplot=<XYPlot>chart.getPlot<>;

XYLineAndShapeRendererxylineandshaperenderer=<XYLineAndShapeRenderer>plot.getRenderer<>;

//設置網(wǎng)格背景顏色

plot.setBackgroundPaint<Color.white>;

//設置網(wǎng)格豎線顏色

plot.setDomainGridlinePaint<Color.pink>;

//設置網(wǎng)格橫線顏色

plot.setRangeGridlinePaint<Color.pink>;

//設置曲線圖與xy軸的距離

plot.setAxisOffset<newRectangleInsets<0D,0D,0D,10D>>;

//設置曲線是否顯示數(shù)據(jù)點

xylineandshaperenderer.setBaseShapesVisible<true>;

//設置曲線顯示各數(shù)據(jù)點的值

XYItemRendererxyitem=plot.getRenderer<>;

xyitem.setBaseItemLabelsVisible<true>;

xyitem.setBasePositiveItemLabelPosition<newItemLabelPosition<ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT>>;

xyitem.setBaseItemLabelGenerator<newStandardXYItemLabelGenerator<>>;

xyitem.setBaseItemLabelFont<newFont<"Dialog",1,14>>;

plot.setRenderer<xyitem>;

并引入了一些另外的包,引入包的語句變成:

<%pageimport="org.jfree.chart.ChartFactory,

org.jfree.chart.title.TextTitle,

org.jfree.data.time.TimeSeries,

org.jfree.data.time.Month,

org.jfree.data.time.TimeSeriesCollection,

org.jfree.chart.plot.XYPlot,

org.jfree.chart.renderer.xy.XYLineAndShap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論