最近用到了JFreeChart,現將實例代碼貼出來,大家可以參考一下,代碼中如有錯誤或可以改進的地方,還請大家指正。
通過下面的代碼,可以很清晰地看出JFreeChart的結構,核心即為chart, plot, XXXAxis, renderer,了解了它們的常用方法后,
會發現其實JFreeChart使用起來是很簡單方便的。廢話不多說了,還是直接看示例吧。
?
1.柱狀圖
??1
/**
??2
?????*?生成圖像文件
??3
?????*?
??4
?????*?
@param
?session
??5
?????*????????????httpsession
??6
?????*?
@param
?w
??7
?????*????????????生成的圖的寬度
??8
?????*?
@param
?h
??9
?????*????????????生成的圖的高度
?10
?????*?
@return
?
?11
?????*??????????????生成的圖像文件的路徑
?12
?????
*/
?13
????
public
?String?createBarChart(HttpSession?session,?
?14
?????????????????????????????????String?title,?
//
?圖片標題
?15
?????????????????????????????????
int
?w,?
//
?圖片寬度
?16
?????????????????????????????????
int
?h,?
//
?圖片高度
?17
?????????????????????????????????CategoryDataset?dataset?
//
用于出圖的數據集
?18
?????????????????????????????????)?
{
?19
????????
?20
????????
//
通過ChartFactory的靜態方法獲取JFreeChart對象
?21
????????JFreeChart?chart?
=
?ChartFactory.createBarChart(title,??????
//
圖片標題
?22
?????????????????????????????????????????????????????????
null
,?????
//
橫坐標標題
?23
?????????????????????????????????????????????????????????
null
,?????
//
縱坐標標題
?24
?????????????????????????????????????????????????????????dataset,??
//
用于出圖的數據集
?25
?????????????????????????????????????????????????????????PlotOrientation.VERTICAL,??
//
柱子方向
?26
?????????????????????????????????????????????????????????
true
,?????
//
是否包含Legend
?27
?????????????????????????????????????????????????????????
false
,????
//
是否包含tooltips
?28
?????????????????????????????????????????????????????????
false
);???
//
是否包含urls
?29
????????chart.setBackgroundPaint(Color.WHITE);
?30
?31
????????
//
?設置標題字體
?32
????????chart.getTitle().setFont(
new
?Font(
"
宋體
"
,?Font.CENTER_BASELINE,?
12
));
?33
?34
????????CategoryPlot?plot?
=
?chart.getCategoryPlot();
?35
?36
????????
/*
//沒有數據時顯示的消息
?37
????????plot.setNoDataMessage("數據還未錄入!");
?38
????????plot.setNoDataMessageFont(new?Font("宋體",?Font.CENTER_BASELINE,?15));
*/
?39
????????
?40
????????
//
橫坐標設置
?41
????????CategoryAxis?domainAxis?
=
?plot.getDomainAxis();
?42
????????
//
設置橫坐標上顯示各個業務子項的字體?
?43
????????domainAxis.setTickLabelFont(
new
?Font(
"
宋體
"
,?Font.PLAIN,?
9
));
?44
????????plot.setDomainAxis(domainAxis);
?45
?46
????????
//
縱坐標設置
?47
????????ValueAxis?rangeAxis?
=
?(ValueAxis)plot.getRangeAxis();
?48
????????
//
?設置最高的一個?Item?與圖片頂端的距離
?49
????????rangeAxis.setUpperMargin(
0.15
);
?50
????????
//
?設置最低的一個?Item?與圖片底端的距離
?51
????????rangeAxis.setLowerMargin(
0.15
);
?52
????????plot.setRangeAxis(rangeAxis);
?53
?54
????????BarRenderer?renderer?
=
?
new
?BarRenderer();
?55
????????renderer.setBaseOutlinePaint(Color.BLACK);
?56
????????
/*
//?設置圖上的文字
?57
????????renderer.setSeriesItemLabelFont(0,?font);
?58
????????renderer.setSeriesItemLabelFont(1,?font);
*/
?59
????????
//
?設置legend的字體
?60
????????renderer.setBaseLegendTextFont(
new
?Font(
"
宋體
"
,?Font.LAYOUT_RIGHT_TO_LEFT,?
10
));
?61
????????
//
?設置?Wall?的顏色
?62
????????
//
renderer.setWallPaint(Color.gray);
?63
????????
//
?設置每種柱的顏色
?64
????????renderer.setSeriesPaint(
0
,?
new
?Color(
133
,
210
,
38
));
?65
????????renderer.setSeriesPaint(
1
,?
new
?Color(
0
,
131
,
249
));
?66
????????
//
設置柱的?Outline?顏色
?67
????????renderer.setSeriesOutlinePaint(
0
,?Color.BLACK);
?68
????????renderer.setSeriesOutlinePaint(
1
,?Color.BLACK);
?69
????????
//
?設置每個平行柱的之間距離
?70
????????renderer.setItemMargin(
0.03
);
?71
????????
?72
????????
//
?顯示每個柱的數值,并修改該數值的字體屬性
?73
????????renderer.setBaseItemLabelGenerator(
new
?StandardCategoryItemLabelGenerator());
?74
????????
//
注意:此句很關鍵,若無此句,那數字的顯示會被覆蓋,給人數字沒有顯示出來的問題?
?75
????????renderer.setBasePositiveItemLabelPosition(
new
?ItemLabelPosition(?
?76
????????ItemLabelAnchor.OUTSIDE12,?TextAnchor.BASELINE_CENTER));?
?77
????????
//
?設置柱形圖上的文字偏離值?
?78
????????renderer.setItemLabelAnchorOffset(10D);
?79
????????renderer.setBaseItemLabelsVisible(
true
);
?80
????????renderer.setBaseItemLabelFont(
new
?Font(
"
Times?New?Roman
"
,?Font.PLAIN,?
9
));
?81
????????
?82
????????plot.setRenderer(renderer);
?83
?84
????????
//
?設置柱的透明度
?85
????????plot.setForegroundAlpha(
0.6f
);
?86
????????
//
?設置橫坐標和縱坐標的顯示位置
?87
????????plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
?88
????????plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
?89
?90
????????
//
?獲取圖片路徑
?91
????????
//
?圖片存于臨時文件夾下
?92
????????String?filename?
=
?
null
;
?93
????????
try
?
{
?94
????????????filename?
=
?ServletUtilities.saveChartAsPNG(chart,?w,?h,?
null
,
?95
????????????????????session);
?96
????????}
?
catch
?(IOException?e)?
{
?97
????????????System.out.println(
"
Exception?-?
"
?
+
?e.toString());
?98
????????????e.printStackTrace(System.out);
?99
????????????filename?
=
?
"
public_error_500x300.png
"
;
100
????????}
101
????????
return
?filename;
102
????}
??2
??3
??4
??5
??6
??7
??8
??9
?10
?11
?12
?13
?14
?15
?16
?17
?18
?19
?20
?21
?22
?23
?24
?25
?26
?27
?28
?29
?30
?31
?32
?33
?34
?35
?36
?37
?38
?39
?40
?41
?42
?43
?44
?45
?46
?47
?48
?49
?50
?51
?52
?53
?54
?55
?56
?57
?58
?59
?60
?61
?62
?63
?64
?65
?66
?67
?68
?69
?70
?71
?72
?73
?74
?75
?76
?77
?78
?79
?80
?81
?82
?83
?84
?85
?86
?87
?88
?89
?90
?91
?92
?93
?94
?95
?96
?97
?98
?99
100
101
102
2.曲線圖
?1
????
/**
?2
?????*?生成圖像文件
?3
?????*?
?4
?????*?
@param
?session
?5
?????*????????????httpsession
?6
?????*?
@param
?data1
?7
?????*????????????IntervalXYDataset
?8
?????*?
@param
?w
?9
?????*????????????生成的圖的寬度
10
?????*?
@param
?h
11
?????*????????????生成的圖的高度
12
?????*?
@return
13
?????*??????????????????生成的圖像文件的路徑
14
?????
*/
15
????
public
?String?createStepLineChart(
16
????????????HttpSession?session,
17
????????????String?title,?
//
?圖片標題
18
????????????IntervalXYDataset?data1,
//
數據集
19
????????????
int
?w,?
//
?圖片寬度
20
????????????
int
?h?
//
?圖片高度
21
????????????)?
{
22
23
????????
/*
24
?????????*?任何類型的圖表的最終表現形式都是在JFreeChart對象進行一些屬性的定制。
25
?????????*?JFreeChart引擎本身提供了一個工廠類用于創建不同類型的圖表對象
26
?????????
*/
27
????????JFreeChart?chart?
=
?ChartFactory.createXYStepChart(title,?
//
?chart?title
28
??????????????????????????????????????????????????????????
null
,?
29
??????????????????????????????????????????????????????????
null
,?
30
??????????????????????????????????????????????????????????data1,?
//
?data
31
??????????????????????????????????????????????????????????PlotOrientation.VERTICAL,?
32
??????????????????????????????????????????????????????????
true
,?
//
?include?legend
33
??????????????????????????????????????????????????????????
false
,?
34
??????????????????????????????????????????????????????????
false
);
35
36
????????
//
?設置背景顏色為白色
37
????????chart.setBackgroundPaint(Color.white);
38
39
????????
//
?設置標題字體
40
????????chart.getTitle().setFont(
new
?Font(
"
宋體
"
,?Font.CENTER_BASELINE,?
12
));
41
????????XYPlot?plot?
=
?chart.getXYPlot();
42
????????
43
????????plot.setBackgroundPaint(Color.lightGray);
44
????????plot.setDomainGridlinePaint(Color.white);
45
????????plot.setRangeGridlinePaint(Color.white);
46
47
????????DateAxis?domainAxis?
=
?
new
?DateAxis();
48
????????domainAxis.setDateFormatOverride(
new
?SimpleDateFormat(
"
MM-dd
"
));
49
????????domainAxis.setTickMarkPosition(DateTickMarkPosition.START);
50
????????domainAxis.setLowerMargin(
0
);
51
????????domainAxis.setUpperMargin(
0
);
52
????????plot.setDomainAxis(domainAxis);
53
54
????????NumberAxis?rangeAxis?
=
?(NumberAxis)plot.getRangeAxis();
55
????????
//
?設置最高的一個?Item?與圖片頂端的距離
56
????????rangeAxis.setUpperMargin(
0.15
);
57
????????
//
?設置最低的一個?Item?與圖片底端的距離
58
????????rangeAxis.setLowerMargin(
0.15
);
59
????????plot.setRangeAxis(rangeAxis);
60
61
????????
/*
62
?????????*?XXXRender:負責如何顯示一個圖表對象
63
?????????
*/
64
????????XYStepRenderer?renderer?
=
?(XYStepRenderer)plot.getRenderer();
65
????????
/*
66
?????????*?設置線條的顏色
67
?????????
*/
68
????????renderer.setSeriesPaint(
0
,?
new
?Color(
0
,
150
,
240
));
69
????????renderer.setSeriesPaint(
1
,?
new
?Color(
244
,
109
,
19
));
70
71
????????
//
?設置圖上的文字字體
72
????????Font?font?
=
?
new
?Font(
"
宋體
"
,?Font.LAYOUT_RIGHT_TO_LEFT,?
10
);
73
????????renderer.setSeriesItemLabelFont(
0
,?font);
74
????????renderer.setSeriesItemLabelFont(
1
,?font);
75
????????
//
?設置legend的字體
76
????????renderer.setBaseLegendTextFont(font);
77
????????renderer.setBaseItemLabelFont(font);
78
79
????????plot.setRenderer(renderer);
80
81
????????String?filename?
=
?
<span style=
?2
?3
?4
?5
?6
?7
?8
?9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
發表評論
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元


評論