由於工作上的需求,有利用到Cytoscape Web Library去畫node之間的關係呈現,方便研究者去
瞭解它們之間的關聯,所以在此就大概說明一下這套Library的功用。
官網上有提到,它是一套我們可以利用其JavaScript API並將資料組合成其自訂的資料格式,
如官網上提到的GraphML是其中一個,有點像XML格式的資料型態,最後它將透過一個
.swf檔案去畫出graph,而我們開發者只要去控制JavaScript Code即可。
JavaScript code配置如下:
請注意visual_style的部分,裡面會有您自訂的一些屬性名稱,如:
這段是定義color的部分,裡面的nodecolor表示當您帶入的GraphML的資料格式有定義如下
<data key='type3'>node1</data>,表示graph就會去帶出這個node顯示#008000的顏色
若是data 非node1則會顯示default預設的顏色來呈現。
而如上之network: xml之xml變數所帶的data,在這裡就是組織的GraphML形式的資料。
而我在這段js code內有獨自定義的一些屬性,剛剛有提到nodecolor了,表示node的顏色,還有
node size => size: { passthroughMapper: { attrName: "weight" } },
對映GraphML為<data key='weight'>20</data>
所以您在GraphML定義的東西,在JavaScript基本配置內如果沒有特別定義的話,就無法呈現
出您要的效果囉!
而GraphML定義如下:
這邊的GraphML data是定義在JavaScript內,您也可以在server端產生並且回傳給client端。
之後可以得到如下的畫面:
畫面內您可以去調整放大縮小、移動的效果,當然您也可以去撰寫node、edge的event處理。
基本上, Cytoscape Web在呈現graph還蠻容易的,我想在做研究上會很有用!
瞭解它們之間的關聯,所以在此就大概說明一下這套Library的功用。
官網上有提到,它是一套我們可以利用其JavaScript API並將資料組合成其自訂的資料格式,
如官網上提到的GraphML是其中一個,有點像XML格式的資料型態,最後它將透過一個
.swf檔案去畫出graph,而我們開發者只要去控制JavaScript Code即可。
JavaScript code配置如下:
var div_id = "cytoscapeweb";
// initialization options
var options = {
swfPath: "./swf/CytoscapeWeb",
flashInstallerPath: "./swf/playerProductInstall"
};
var visual_style = {
global: {
backgroundColor: "#FFFFFF"
},
nodes: {
shape: "ELLIPSE",
borderWidth: 2,
borderColor: {
defaultValue:"#157DEC"
},
size: { passthroughMapper: { attrName: "weight" } },
color: {
defaultValue: "#FFFF00",//#fff999
discreteMapper: {
attrName: "nodecolor",
entries: [
{ attrValue: "node1", value: "#008000" }
]
}
},
selectionBorderColor:"#000000",
hoverGlowOpacity:1,
hoverBorderColor:"#000000",
hoverGlowColor:"#B0E2FF",
labelHorizontalAnchor: "center",
labelFontColor:"#000000",
labelGlowOpacity:1,
labelGlowColor:"#FCFCFC",
labelVerticalAnchor:"top",
labelFontWeight:"bold",
labelFontSize:12,
selectionColor:"#AB8EC6",
opacity:1.0
},
edges: {
width: 3,
color: "#1E669B"
}
};
vis = new org.cytoscapeweb.Visualization(div_id, options);
// callback when Cytoscape Web has finished drawing
vis.ready(function() {
// add a listener for when nodes and edges are clicked
});
// draw options
var draw_options = {
// your data goes here
network: xml,
// hide pan zoom
layout: 'ForceDirected',
panZoomControlVisible: true,
visualStyle: visual_style
};
vis.draw(draw_options);
請注意visual_style的部分,裡面會有您自訂的一些屬性名稱,如:
defaultValue: "#FFFF00",//#fff999 discreteMapper: { attrName: "nodecolor", entries: [ { attrValue: "node1", value: "#008000" } ] }
這段是定義color的部分,裡面的nodecolor表示當您帶入的GraphML的資料格式有定義如下
<data key='type3'>node1</data>,表示graph就會去帶出這個node顯示#008000的顏色
若是data 非node1則會顯示default預設的顏色來呈現。
而如上之network: xml之xml變數所帶的data,在這裡就是組織的GraphML形式的資料。
而我在這段js code內有獨自定義的一些屬性,剛剛有提到nodecolor了,表示node的顏色,還有
node size => size: { passthroughMapper: { attrName: "weight" } },
對映GraphML為<data key='weight'>20</data>
所以您在GraphML定義的東西,在JavaScript基本配置內如果沒有特別定義的話,就無法呈現
出您要的效果囉!
而GraphML定義如下:
var xml = '\
<graphml>\
<key id="label" for="all" attr.name="label" attr.type="string"/>\
<key id="nodecolor" for="node" attr.name="nodecolor" attr.type="string" />\
<key id="weight" for="node" attr.name="weight" attr.type="double"/>\
<graph edgedefault="directed">\
<node id="1">\
<data key="label">A</data>\
<data key="nodecolor">node1</data>\
<data key="weight">22.0</data>\
</node>\
<node id="2">\
<data key="label">B</data>\
<data key="nodecolor">defaultNode</data>\
<data key="weight">10.5</data>\
</node>\
<node id="3">\
<data key="label">C</data>\
<data key="nodecolor">node1</data>\
<data key="weight">31.0</data>\
</node>\
<edge source="1" target="2">\
<data key="label">A to B</data>\
</edge>\
<edge source="1" target="3">\
<data key="label">A to C</data>\
</edge>\
</graph>\
</graphml>\
';
這邊的GraphML data是定義在JavaScript內,您也可以在server端產生並且回傳給client端。
之後可以得到如下的畫面:
畫面內您可以去調整放大縮小、移動的效果,當然您也可以去撰寫node、edge的event處理。
基本上, Cytoscape Web在呈現graph還蠻容易的,我想在做研究上會很有用!
留言
張貼留言