echarts讀取JSON文件并畫圖完整代碼
1. 創(chuàng)建一個文件選擇器
<input type="file" id="files" value="選文件"/> <script> var inputElement = document.getElementById("files"); inputElement.addEventListener("change", handleFiles, false); function handleFiles() { var selectedFile = document.getElementById("files").files[0];//獲取讀取的File對象 var reader = new FileReader();//讀取操作就是由它完成的。 reader.readAsText(selectedFile);//讀取文件的內(nèi)容 reader.onload = function(){ console.log("讀取結(jié)果:", this.result);//當讀取完成之后會回調(diào)這個函數(shù),然后此時文件的內(nèi)容存儲到了result中。直接操作即可。 }; }
文件選擇器能夠選擇并讀取本設(shè)備的文件。
2. 選擇JSON文件
JSON文件中的內(nèi)容如下所示,文件中的引號必須為雙引號,否則會報錯:
{ "Matcha Latte": { "2015": 43.3, "2016": 85.8, "2017": 93.7 }, "Cheese Cocoa": { "2015": 86.4, "2016": 65.2, "2017": 82.5 }, "Milk Tea": { "2015": 83.1, "2016": 73.4, "2017": 55.1 }, "Walnut Brownie": { "2015": 72.4, "2016": 53.9, "2017": 39.1 } }
3. 數(shù)據(jù)處理
我們需要用讀入的數(shù)據(jù)來在echarts上進行繪圖,又因為echarts接收的數(shù)據(jù)的類型是數(shù)組類型,所以我們需要將讀入的數(shù)據(jù)轉(zhuǎn)為數(shù)組類型的數(shù)據(jù)才能將其直接傳入echarts中。
//this.result是讀入的JSON文件的數(shù)據(jù),讀出的數(shù)據(jù)時對象類型,要轉(zhuǎn)為數(shù)組才行 let json = JSON.parse(this.result); //echarts開頭必須添加每一列的名字 list = [['Product','2015','2016','2017']]; //得到j(luò)son文件中的所有鍵 json_key = Object.keys(json); for(let i = 0;i < json_key.length;i++){ //將每一行數(shù)據(jù)拼接成數(shù)組 list_i = [json_key[i]].concat(Object.values(json[json_key[i]])) list.push(list_i) }
4. 傳入數(shù)據(jù)開始畫圖
<div id="main" style="width: 1000px;height:500px;"></div> function draw(list){ // 基于準備好的dom,初始化echarts實例 var myChart = echarts.init(document.getElementById('main')); console.log(list) //瀏覽器寬度改變的時候,始終保持圖表寬度是頁面的 100%。 window.onresize = function() { myChart.resize(); }; // 指定圖表的配置項和數(shù)據(jù) var option = { legend: {}, tooltip: {}, toolbox: { feature: { //圖片下載功能 saveAsImage: { type: 'png', name: 'test1', backgroundColor: 'auto', show: true, title: true, }, }, }, dataset: { // 默認把第一個維度映射到 X 軸上,后面維度映射到 Y 軸上。 source: list }, xAxis: { //是否顯示 show: true, }, //指定y軸為類目軸,參數(shù)默認'value' yAxis: {type: 'category'}, series: [{ type: 'bar' }], series: [ { type: 'bar', //設(shè)定x軸顯示的數(shù)據(jù),y軸顯示的數(shù)據(jù) encode: { x: '2015', y: 'product', }, }, { type: 'bar', encode: { x: '2016', y: 'product', }, },{ type: 'bar', encode: { x: '2017', y: 'product', }, }, ] }; myChart.setOption(option); }
5. 結(jié)果展示
6. 完整代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="./JS/echarts.js"></script> <title>Document</title> </head> <body> <input type="file" id="files" value="選文件"/> <div id="main" style="width: 600px;height:400px;"></div> <script> var inputElement = document.getElementById("files"); inputElement.addEventListener("change", handleFiles, false); function handleFiles() { var selectedFile = document.getElementById("files").files[0];//獲取讀取的File對象 var reader = new FileReader();//這里是核心?。?!讀取操作就是由它完成的。 reader.readAsText(selectedFile);//讀取文件的內(nèi)容 reader.onload = function(){ console.log("讀取結(jié)果:", this.result);//當讀取完成之后會回調(diào)這個函數(shù),然后此時文件的內(nèi)容存儲到了result中。直接操作即可。 let json = JSON.parse(this.result); list = [['Product','2015','2016','2017']]; json_key = Object.keys(json); for(let i = 0;i < json_key.length;i++){ list_i = [json_key[i]].concat(Object.values(json[json_key[i]])) list.push(list_i) } draw(list) }; } function draw(list){ // 基于準備好的dom,初始化echarts實例 var myChart = echarts.init(document.getElementById('main')); console.log(list) //瀏覽器寬度改變的時候,始終保持圖表寬度是頁面的 100%。 window.onresize = function() { myChart.resize(); }; // 指定圖表的配置項和數(shù)據(jù) var option = { legend: {}, tooltip: {}, toolbox: { feature: { //圖片下載功能 saveAsImage: { type: 'png', name: 'test1', backgroundColor: 'auto', }, }, }, dataset: { // 默認把第一個維度映射到 X 軸上,后面維度映射到 Y 軸上。 source: list }, xAxis: { //是否顯示 show: true, }, //指定y軸為類目軸,參數(shù)默認'value' yAxis: {type: 'category'}, series: [ { type: 'bar', //設(shè)定x軸顯示的數(shù)據(jù),y軸顯示的數(shù)據(jù) encode: { x: '2015', y: 'product', }, }, { type: 'bar', encode: { x: '2016', y: 'product', }, },{ type: 'bar', encode: { x: '2017', y: 'product', }, }, ] }; myChart.setOption(option); } </script> </body> </html>
總結(jié)
到此這篇關(guān)于echarts讀取JSON文件并畫圖的文章就介紹到這了,更多相關(guān)echarts讀取JSON文件畫圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實現(xiàn)給數(shù)字添加千位分隔符
這篇文章主要為大家詳細介紹了JavaScript如何實現(xiàn)給數(shù)字添加千位分隔符,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11javascript FAQ函數(shù)(提問+回復(fù))
javascript FAQ函數(shù),當點擊問題時顯示下面的回復(fù)內(nèi)容。2009-07-07