當ECharts碰到TWaver

百度公司的ECharts發展迅速,已經成爲HTML5 Chart的佼佼者,這讓大家驕傲:中國人終於也有世界級的開源通用UI產品了。正如其網站所說,它是百度的,是中國的,也是世界的。想想那些年,我們追逐感慨過的chart產品,fusionchart、highchart等等不計其數,隨着HTML5的迅速普及和ECharts的瘋狂發展,大家可以忘掉那些產品了。其他商業chart產品基本上也離顫抖中關門的日子不遠了。

TWaver各個分支也都有chart模塊。雖然它不是核心組件,但是也有和TWaver的MVC框架緊密結合的便利,一些簡單的應用場景是完全可以應付的。但和ECharts相比,毫無疑問ECharts表現力更豐富、功能更強大。其實TWaver和ECharts功能並不衝突和重疊,相反他們完全可以一起配合使用:TWaver做拓撲圖、3D圖,ECharts負責圖表。很多TWaver的客戶也是這樣做的。

下面我們就嘗試把ECharts和TWaver 3D場景進行結合,讓兩者都迸發出更精彩的火花。

首先用ECharts創建3個常見圖表:

var chart1 = ec.init(document.getElementById('chart1'));                                 
var chart2 = ec.init(document.getElementById('chart2'));                                 
var chart3 = ec.init(document.getElementById('chart3')); 
ECharts通過單獨的options可以把圖表要顯示的內容和樣式全都定義清楚,這一點確實很方便。例如下面的options定義:

option1 = {
    title : {
        text: '某樓盤銷售情況',
        subtext: '純屬虛構'
    },
    tooltip : {
        trigger: 'axis'
    },
    legend: {
        data:['意向','預購','成交']
    },
    toolbox: {
        show : true,
        feature : {
            mark : {show: true},
            dataView : {show: true, readOnly: false},
            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
            restore : {show: true},
            saveAsImage : {show: true}
        }
    },
    calculable : true,
    xAxis : [
        {
            type : 'category',
            boundaryGap : false,
            data : ['週一','週二','週三','週四','週五','週六','週日']
        }
    ],
    yAxis : [
        {
            type : 'value'
        }
    ],
    series : [
        {
            name:'成交',
            type:'line',
            smooth:true,
            itemStyle: {normal: {areaStyle: {type: 'default'}}},
            data:[10, 12, 21, 54, 260, 830, 710]
        },
        {
            name:'預購',
            type:'line',
            smooth:true,
            itemStyle: {normal: {areaStyle: {type: 'default'}}},
            data:[30, 182, 434, 791, 390, 30, 10]
        },
        {
            name:'意向',
            type:'line',
            smooth:true,
            itemStyle: {normal: {areaStyle: {type: 'default'}}},
            data:[1320, 1132, 601, 234, 120, 90, 20]
        }
    ]
};
 
chart1.setOption(option1);

三個圖表顯示如下:
chart1

chart2

chart3

接下來我們創建一個TWaver 3D立方體,放在另外的canvas上:

var box = new mono.DataBox();
var camera = new mono.PerspectiveCamera(30, 1.5, 0.1, 10000);
camera.setPosition(800,1000,1500);
 
var network= new mono.Network3D(box, camera, canvas);
var interaction = new mono.DefaultInteraction(network);
network.setInteractions([new mono.SelectionInteraction(network), interaction]);
 
var cube=new mono.Cube(1000,500,1000);
box.add(cube);

最後一步,是把3個chart貼在立方體的3個面上,並能保持動態更新。ECharts的每個chart都有一個getImage()方法,可以很方便的拿到這個chart當前的“截圖”。這樣就方便了,我們把它“抓”下來,貼到cube的一個面上即可:

//截圖chart生成圖片
var image=chart1.getImage();
//圖片生成加載完畢後,更新立方體頂面貼圖
image.οnlοad=function(){          
  cube.setStyle('top.m.texture.image', image);
} 

把3個chart都如法炮製,分別貼在立方體的三個面上,效果就出來了:
441

再setInterval增加一個循環,把貼圖不停的更新到立面上,這樣就能讓chart在3D場景中實時更新了。
442

由此可見,我們完全可以在項目中同時使用TWaver和ECharts進行數據呈現:TWaver負責拓撲圖、通用組件、3D等部分,ECharts負責圖表呈現部分。既可以2D相互搭配使用,也可以在3D中融合使用,充分發揮兩個產品的特長。



發佈了111 篇原創文章 · 獲贊 24 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章