使用 JFreeChart 生成各種樣式的圖表
利川網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
限于篇幅的問(wèn)題我們?cè)谶@里只實(shí)現(xiàn)兩種常用的圖表,其他類型圖表讀者可以觸類旁通。我們先給出柱狀圖的實(shí)現(xiàn),餅圖的實(shí)現(xiàn)再來(lái)跟柱狀圖進(jìn)行比較。
1 柱狀圖
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
/**
* 該類用于演示最簡(jiǎn)單的柱狀圖生成
* @author Winter Lau
*/
public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D(
"水果產(chǎn)量圖", // 圖表標(biāo)題
"水果", // 目錄軸的顯示標(biāo)簽
"產(chǎn)量", // 數(shù)值軸的顯示標(biāo)簽
dataset, // 數(shù)據(jù)集
PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
true, // 是否顯示圖例(對(duì)于簡(jiǎn)單的柱狀圖必須是 false)
false, // 是否生成工具
false // 是否生成 URL 鏈接
);
FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
} finally {
try {
fos_jpg.close();
} catch (Exception e) {}
}
}
/**
* 獲取一個(gè)演示用的簡(jiǎn)單數(shù)據(jù)集對(duì)象
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, null, "蘋果");
dataset.addValue(200, null, "梨子");
dataset.addValue(300, null, "葡萄");
dataset.addValue(400, null, "香蕉");
dataset.addValue(500, null, "荔枝");
return dataset;
}
/**
* 獲取一個(gè)演示用的組合數(shù)據(jù)集對(duì)象
* @return
*/
private static CategoryDataset getDataSet2() {
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;
}
}
2 餅圖
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 用于演示餅圖的生成
* @author Winter Lau
*/
public class PieChartDemo {
public static void main(String[] args) throws IOException{
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果產(chǎn)量圖", // 圖表標(biāo)題
data,
true, // 是否顯示圖例
false,
false
);
// 寫圖表對(duì)象到文件,參照柱狀圖生成源碼
}
/**
* 獲取一個(gè)演示用的簡(jiǎn)單數(shù)據(jù)集對(duì)象
* @return
*/
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;
}
}
3將生成的圖表移到瀏覽器上
package lius.chart.demo;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 演示通過(guò) servlet 直接輸出圖表
* @author Winter Lau
*/
public class ChartDemoServlet extends HttpServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果產(chǎn)量圖",
data,
true,
false,
false
);
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null);
}
/**
* 獲取一個(gè)演示用的簡(jiǎn)單數(shù)據(jù)集對(duì)象
* @return
*/
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;
}
}
4高級(jí)主題
很多情況我們不僅僅要求可以在瀏覽器上顯示一個(gè)圖表,我們更需要客戶可以直接在圖表上做一下交互的操作,例如獲取信息提示,點(diǎn)擊圖表某個(gè)部分進(jìn)行更詳細(xì)信息的展示等等。例如前面生成的簡(jiǎn)單柱狀圖,用戶需要在看到柱狀圖后點(diǎn)擊某種水果例如是蘋果即可看到各個(gè)地區(qū)蘋果產(chǎn)量的情況。為此就要求該圖形具有交互操作的功能。在 HTML 中為了讓一個(gè)圖像具有可交互的功能就必須給該圖像定義一個(gè) Map 對(duì)象。下表節(jié)選一段具有該功能的 HTML 代碼:
MAP NAME="chartMap"
AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0category=100"
title="100 = 7,048"
onclick="javascript:clickChart('100');return false;"
AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0category=200"
title="200 = 6,721"
onclick="javascript: clickChart ('200');return false;"
AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0category=300"
title="300 = 5,929"
onclick="javascript: clickChart ('300');return false;"
AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0category=400"
title="400 = 5,005"
onclick="javascript: clickChart ('400');return false;"
AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0category=Diet"
title="Diet = 7,017" onclick="javascript:
clickChart ('Diet');return false;"
/MAP
由此就產(chǎn)生了一個(gè)問(wèn)題:如果根據(jù)一個(gè)圖像來(lái)生成對(duì)應(yīng)的 MAP 對(duì)象。我們回頭看看剛才的代碼,在創(chuàng)建一個(gè)圖表對(duì)象時(shí)候有兩個(gè)參數(shù),我們舉柱狀圖的例子來(lái)講這兩個(gè)參數(shù)就是 ChartFactory. createBarChart3D 方法中的最后兩個(gè)參數(shù),這兩個(gè)參數(shù)的類型都是布爾值。這兩個(gè)參數(shù)意思分別是:是否創(chuàng)建工具提示 (tooltip) 以及是否生成 URL。這兩個(gè)參數(shù)分別對(duì)應(yīng)著 MAP 中一個(gè) AREA 的 title 屬性以及 href 屬性。
可是我想知道的是怎么來(lái)產(chǎn)生這個(gè) MAP ??!哈哈,不要著急,JFreeChart 已經(jīng)幫我們做好生成 MAP 對(duì)象的功能。為了生成 MAP 對(duì)象就要引入另外一個(gè)對(duì)象:ChartRenderingInfo。因?yàn)?JFreeChart 沒(méi)有直接的方法利用一個(gè)圖表對(duì)象直接生成 MAP 數(shù)據(jù),它需要一個(gè)中間對(duì)象來(lái)過(guò)渡,這個(gè)對(duì)象就是 ChartRenderingInfo。
可以用FineReport報(bào)表軟件實(shí)現(xiàn)。finereport是純java軟件,類excel設(shè)計(jì)模式,是一款功能極其牛掰的表格工具,可與數(shù)據(jù)庫(kù)直接對(duì)接(一般的數(shù)據(jù)庫(kù),Oracle,SqlServer,MySql,DB2,Sybase,Informix等都支持),文本數(shù)據(jù)直接導(dǎo)入當(dāng)然也支持,企業(yè)級(jí)額應(yīng)用中包括設(shè)置定時(shí)報(bào)表、自定匯總數(shù)據(jù)發(fā)送郵件、報(bào)表權(quán)限分配、決策平臺(tái)搭建等,因?yàn)槭菍I(yè)的報(bào)表軟件,功能很強(qiáng)大,其實(shí)很多業(yè)內(nèi)人士都在用這款軟件,另外幾乎不用自己編寫代碼,所以新手很容易上手使用。應(yīng)該會(huì)比較適合您的,滿意的話可以采納的哦,謝謝了
把數(shù)據(jù)庫(kù)中需要的數(shù)據(jù)處理后做成可視化圖表,根據(jù)不同需求可以做成不同形式的圖表,節(jié)省時(shí)間,效果比較好,java報(bào)表軟件推薦:國(guó)外的話水晶報(bào)表,SAP公司的商業(yè)報(bào)表工具,作為SAP“集團(tuán)”下的報(bào)表組件模塊。10年事前盛行一時(shí),后被SAP收購(gòu)。但水晶報(bào)表(Crystal Report)在理論上只支持單數(shù)據(jù)集,對(duì)多集的支持依賴于數(shù)據(jù)庫(kù)的運(yùn)算能力(叉乘與聯(lián)合等或?qū)懘鎯?chǔ)過(guò)程),多庫(kù)一般難以支持。
國(guó)內(nèi)的話FineReport,目前國(guó)內(nèi)報(bào)表軟件領(lǐng)域發(fā)展最成熟也是市場(chǎng)份額最高的。IDC的報(bào)告里,17年甚至超過(guò)SAP,IBM,在這個(gè)細(xì)分領(lǐng)域,也是Gartner的BI選型市場(chǎng)指南里唯 一推薦的報(bào)表工具。零代碼開發(fā),類似excel的設(shè)計(jì)方式,上手簡(jiǎn)單。
新聞名稱:公司報(bào)表java代碼,java開源報(bào)表
新聞來(lái)源:http://jinyejixie.com/article18/dsecidp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、面包屑導(dǎo)航、ChatGPT、微信小程序、營(yíng)銷型網(wǎng)站建設(shè)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)