java統計圖表
1. 如何使用java做統計圖表
//參考地址http://echarts..com/去網站下js控制項,下面是餅圖的代碼,下圖是我的代碼效果
functionquery1(housetype,redStatisticsList,text0,cashingSum,tranferSum){
<!--紅包發放數據-->
varmyrodiusred=echarts.init(document.getElementById('知頌碧mainrodius'));//ID
varredHousehold=housetype;
varredMoney=redStatisticsList;
varallMoney=0;//總金額搭舉
$.each(redStatisticsList,function(index,item){
allMoney=allMoney+Number(item.value);
})
optionTwo={
title:{
text:text0,
subtext:"總金額:"+allMoney+" 提現櫻戚總額:"+cashingSum+" 到賬總額:"+tranferSum,
x:'center'
},
tooltip:{
trigger:'item',
formatter:"{a}<br/>{b}({d}%)"
},
legend:{
orient:'vertical',
left:'left',
data:housetype
},
series:[
{
type:'pie',
radius:'55%',
center:['50%','60%'],
data:redMoney,
itemStyle:{
emphasis:{
shadowBlur:10,
shadowOffsetX:0,
shadowColor:'rgba(0,0,0,0.5)'
}
}
}
]
};
myrodiusred.setOption(optionTwo);
}
2. Java中如何讓使用python的統計包繪圖
看來是同道。你提到的這個問題很難。
java調用python容易。 java甚至可以直接調用python的類。python調用java更容易了。
不過GUI要想融合,據目前20年的技術來看,只有本土的可以。 比如以前的微軟體ActiveX,不管你是什麼語言開發的都可以在windows下用OLE方式嵌入。
java的制圖功能,因為它的設計理念 ,它是封閉的。也就是說,除非你使用了它本地化的GUI方法,否則就不可能實現。
那麼說,如果我一定要實現怎麼辦呢?只能走很長的彎路。方法還是有幾個的。
方法1:
在java的panel里嵌入一個瀏覽器,然後在瀏覽器里顯示統計圖表。這個真是不要太容易了。 不管是你是python生成的本地圖片,還是直接用javascript生成的圖都可以嵌入進去。美觀不用說
方法2:
繪圖使用開源的,比如plt之類的。不過它被本地化成java版本的。然後用java調用python,再用python產生數據後,通過jython調用java本地化的繪圖工具。
表面上看,這個東西就是沒有價值的,為什麼不直接用java調用繪圖。關鍵在於python本身對於數據處理的優勢太明顯。輕松就可以完成復雜的數據結構處理。所以還是有價值的
方法3:
浮動窗口方式。這個就不說了。如果你的java是固定在窗口特定位置的。這個就容易了。怎麼浮動窗口要根據操作系統而定。
方法4:簡單方案
python生成圖片後,輸出成JPEG或者是PNG或者是GIF,然後讓JAVA顯示這個圖片。這個可能是最最簡單的。
方法5:windows專用,不知道可否使用
僅限於特定場景,在要顯示圖片的地方,顯示一個品紅色的純色圖。然後讓python的圖形輸出轉到directshow之類的API,直接寫顯卡。這樣就可以顯示動畫效果。
3. java怎麼做報表功能
使用 JFreeChart 生成各種樣式的圖表
限於篇幅的問題我們在這里只實現兩種常用的圖表,其他類型圖表讀者可以觸類旁通。我們先給出柱狀圖的實現,餅圖的實現再來跟柱狀圖進行比較。
1 柱狀圖
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
/**
* 該類用於演示最簡單的柱狀圖生成
* @author Winter Lau
*/
public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D(
"水果產量圖", // 圖表標題
"水果", // 目錄軸的顯示標簽
"產量", // 數值軸的顯示標簽
dataset, // 數據集
PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
true, // 是否顯示圖例(對於簡單的柱狀圖必須是 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) {}
}
}
/**
* 獲取一個演示用的簡單數據集對象
* @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;
}
/**
* 獲取一個演示用的組合數據集對象
* @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("水果產量圖", // 圖表標題
data,
true, // 是否顯示圖例
false,
false
);
// 寫圖表對象到文件,參照柱狀圖生成源碼
}
/**
* 獲取一個演示用的簡單數據集對象
* @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.*;
/**
* 演示通過 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("水果產量圖",
data,
true,
false,
false
);
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null);
}
/**
* 獲取一個演示用的簡單數據集對象
* @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高級主題
很多情況我們不僅僅要求可以在瀏覽器上顯示一個圖表,我們更需要客戶可以直接在圖表上做一下交互的操作,例如獲取信息提示,點擊圖表某個部分進行更詳細信息的展示等等。例如前面生成的簡單柱狀圖,用戶需要在看到柱狀圖後點擊某種水果例如是蘋果即可看到各個地區蘋果產量的情況。為此就要求該圖形具有交互操作的功能。在 HTML 中為了讓一個圖像具有可交互的功能就必須給該圖像定義一個 Map 對象。下表節選一段具有該功能的 HTML 代碼:
<MAP NAME="chartMap">
<AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100"
title="100 = 7,048"
onclick="javascript:clickChart('100');return false;">
<AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200"
title="200 = 6,721"
onclick="javascript: clickChart ('200');return false;">
<AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300"
title="300 = 5,929"
onclick="javascript: clickChart ('300');return false;">
<AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400"
title="400 = 5,005"
onclick="javascript: clickChart ('400');return false;">
<AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet"
title="Diet = 7,017" onclick="javascript:
clickChart ('Diet');return false;">
</MAP>
由此就產生了一個問題:如果根據一個圖像來生成對應的 MAP 對象。我們回頭看看剛才的代碼,在創建一個圖表對象時候有兩個參數,我們舉柱狀圖的例子來講這兩個參數就是 ChartFactory. createBarChart3D 方法中的最後兩個參數,這兩個參數的類型都是布爾值。這兩個參數意思分別是:是否創建工具提示 (tooltip) 以及是否生成 URL。這兩個參數分別對應著 MAP 中一個 AREA 的 title 屬性以及 href 屬性。
可是我想知道的是怎麼來產生這個 MAP 啊!哈哈,不要著急,JFreeChart 已經幫我們做好生成 MAP 對象的功能。為了生成 MAP 對象就要引入另外一個對象:ChartRenderingInfo。因為 JFreeChart 沒有直接的方法利用一個圖表對象直接生成 MAP 數據,它需要一個中間對象來過渡,這個對象就是 ChartRenderingInfo。
4. java課程培訓機構分享數據可視化圖表類型分析
數據的可視化顯示能夠讓我們的工作更加流暢,以及對項目的發展狀態有直觀的了解。今天我們就一起來學習一下,常見的數據可視化圖都有哪些類型。
折線圖
折線圖可能是常見的可視化方式了,它可以讓用戶很直觀地按照時間維度了解系統的情況。系統中每個單一或聚合的指標都會正滑悔以一條折線在圖表中體現。但當同一個圖表中同時存在多條折線時,就可能會對閱讀有所影響,所以舉正大多數情況下都可以選擇僅查看其中的少數幾條折線,而不是讓所有折線同時顯示。如果某個指標的數值產生了大於正常范圍的波動,就會很容易發現。例如下圖中異常的紫線、黃線、淺藍線。
折線圖的另一個讓悶用法是可以將多條折線堆疊起來以顯示它們之間的關系。例如對於通過折線圖反映伺服器的請求數量,可以單獨看到每台伺服器上的請求,也可以聚合在一起看。這就可以在同一個圖表中靈活查看整個系統以及每個實例的情況了。
熱力圖
另一種常見的可視化方式是熱力圖。熱力圖與條形圖比較類似,還可以在條形圖的基礎上顯示某部分在整體中佔比的變化情況。例如在查看網路請求延時的時候,就可以使用熱力圖快速查看到所有網路請求的總體趨勢和分布情況,另外,它可以使用不同顏色來表示不同部分的數值。
儀表圖
還有一種常見的可視化方式是儀表圖,用戶可以通過儀表圖快速了解單個指標。儀表一般用於單個指標的顯示,例如車速表代表汽車的行駛速度、油量表代表油箱中的汽油量等等。大多數的儀表圖都有一個共通點,就是會劃分出所示指標的對應狀態。
除了常規儀表樣式的顯示方式之外,還有較為直接的數據顯示方式,配合相同的配色方案,一眼就可以看出各個指標所處的狀態,這一點與和儀表的特點類似。用戶不需要仔細閱讀,就可以大致了解各個指標的不同狀態。這種類型的可視化是我常用的類型,在數秒鍾之間,我就可以全面地總覽系統各方面地運行情況。
火焰圖
由Netflix的BrendanGregg在2011年開始使用的火焰圖是一種較為少見地可視化方式。它不像儀表圖那樣可以從圖表中快速得到關鍵信息,通常只會在需要解決某個應用的問題的時候才會用到這種圖表。火焰圖主要用於CPU、內存和相關幀方面的表示,X軸按字母順序將幀一一列出,而Y軸則表示堆棧的深度。圖中每個矩形都是一個標明了調用的函數的堆棧幀。矩形越寬,就表示它在堆棧中出現越頻繁。java課程培訓機構發現在分析系統性能問題的時候,火焰圖能夠起到很大的作用,大家不妨嘗試一下。