用cytoscape.js展示neo4j网络关系图sea的博客

用可视化的方式来展示网络关系图是一件挺有趣的事情,在选定用cytoscape.js来显示neo4j图形数据库的数据后我做了一个原型,并用下面三篇博客来记录了做原型的过程。

用cytoscape.js展示neo4j网络关系图-1.Flask用cytoscape.js展示neo4j网络关系图-2.py2neo用cytoscape.js展示neo4j网络关系图-3.cytoscape.js(这篇博客)要完成的功能要把neo4j数据库里面的Movie数据正确的显示到前端,我们需要完成如下的功能。

搭建基于Flask的简单网站用py2neo来获取neo4j的节点及关系用cytoscape.js来显示网络关系图上一篇博客介绍了如何用py2neo来获取neo4j的节点及关系,现在我们要用cytoscape.js来把用neo4j取得的节点和关系显示到网页上。

先看看cytoscape.js是什么cytoscape是一个网络图的可视化工具,大量的生物分子/基因领域的公司用它来做可视化分析。由于它的通用性,慢慢的也被其他领域的人用来做网络的可视化和分析。cytoscape分为两种,一种叫做cytoscapedesktop,是一个桌面软件,可以把数据导入然后生成可视化的网络图进行分析;另一种叫做cytoscape.js,是一个javascript库,主要给开发人员使用,来在网页上生成可视化的网络图。我们要用的是后者。

neo4j有三个概念:图(Graph),节点(Node)和关系(Relationship)。cytoscape.js也有三个对应的概念:图(用方法cytoscape()来生成),节点(Node)和边(Edge)。

下面是用cytoscape.js画图的典型方法。

varcy=cytoscape({container:document.getElementById('cy'),elements:{nodes:[/*...*/],edges:[/*...*/]},style:[/*...*/],layout:{name:'cose'}});主要是用cytoscape()函数生成cy,并填充其各种属性(如:container,elements,style,layout等等)。让我们来写个简单的网页来生成下面的图。所有的代码都在一个html文件中,你可以把它存成index.html,然后用浏览器直接打开看效果。

代码18行,container属性被设置为用

这个div来绘制图。

代码30-36行,elements属性包含的是图里的节点和边。

节点包括多个属性值,如:{data:{id:'172',name:'TomCruise',label:'Person'}}。其中只有id是保留属性必须填,其它如name还有label都是我们自定义的属性,你可以自定义任意多的属性。

边和节点的属性值很类似,如:{data:{source:'172',target:'183',relationship:'Acted_In'}}。边也有id是保留属性但不是必须的,source/target都是保留属性,source表示开始节点(startnode)的id值,target是结束节点(endnode)的id值,relationship是我们自定义的属性。

有了节点和边的数据,那它们显示出来是什么样子的则是由代码19-29行的style属性决定的。style由多个如下的(selector+css)样式组成。

{selector:'node[label="Person"]',css:{'background-color':'#6FB1FC','content':'data(name)}}selector属性选择要修改样式的元素,上面我们选择了label="Person"的节点。css设置样式。这里我们设置Person节点的背景颜色为’#6FB1FC’。content属性决定节点上显示的文字是什么,我们用了一个data()函数来从节点数据里取出自定义节点({data:{id:'172',name:'TomCruise',label:'Person'}})里name值,也就是’TomCruise’。

{selector:'edge',css:{'content':'data(relationship)','target-arrow-shape':'triangle'}}边(edge)的style和节点有点不一样。我们选择显示的文字是relationship的值。而且我们需要把边的三角形箭头显示出来('target-arrow-shape':'triangle')。

代码37行,layout属性。layout布局网络图里的节点显示的位置。你可以选择不同类型的layout把整个网络显示成树形,圆形,网格,力导向图等等。我们随便选了一个’grid’网格布局。

开始写代码我们再回过头来看看前面我们建好的Flask网站的目录结构。下面所有的源代码都可以从我的github项目cytoscape_neo4jclone。

C:\cytoscape_neo4j|app.py|+---static|+---css||style.css|||\---js|code.js|cytoscape.min.js|jquery-1.11.2.min.js|\---templatesindex.html我们需要修改app.py和code.js。先看看code.js,它从app.py获取JSON数据,然后调用cytoscape()函数显示网络图。

用cytoscape.js来显示Movie网络关系图下面是code.js的代码。(源代码:cytoscape_neo4j/static/js/code.js)

$(function(){$.get('/graph',function(result){varstyle=[{selector:'node[label="Person"]',css:{'background-color':'#6FB1FC'}},{selector:'node[label="Movie"]',css:{'background-color':'#F5A45D'}}];

varcy=cytoscape({container:document.getElementById('cy'),style:style,layout:{name:'cose',fit:false},elements:result.elements});},'json');});和前面讲的代码大同小异。代码第2行,用jQuery的$.get('/graph',function(result){},'json')方法从网站后端的’/graph’路径获得JSON数据存在result中。JSON数据的内容如下:

{"elements":{"edges":[{"data":{"relationship":"ACTED_IN","source":"174","target":"327"}},{"data":{"relationship":"ACTED_IN","source":"174","target":"273"}},/*...*/],"nodes":[{"data":{"id":"173","label":"Movie","released":1999,"tagline":"WelcometotheRealWorld","title":"TheMatrix"}},{"data":{"born":1962,"id":"189","label":"Person","name":"TomCruise"}},/*..*/]}}我们只需要在代码第12行,elements:result.elements把result里的elements复给elements属性就好。

代码3-6行,style和前面讲到的差不多,这次我们并没有设content属性,所以显示的节点上不会有文字。

下面我们看看app.py是如何把neo4j的数据转成符合cytoscape要求的JSON的。

把neo4j的数据转成cytoscape需要的JSON数据下面是app.py的代码。(源代码:cytoscape_neo4j/app.py)

#coding=utf-8fromflaskimportFlask,jsonify,render_templatefrompy2neoimportGraph

app=Flask(__name__)graph=Graph()

defbuildNodes(nodeRecord):data={"id":str(nodeRecord.n._id),"label":next(iter(nodeRecord.n.labels))}data.update(nodeRecord.n.properties)

return{"data":data}

defbuildEdges(relationRecord):data={"source":str(relationRecord.r.start_node._id),"target":str(relationRecord.r.end_node._id),"relationship":relationRecord.r.rel.type}

@app.route('/')defindex():returnrender_template('index.html')

@app.route('/graph')defget_graph():nodes=map(buildNodes,graph.cypher.execute('MATCH(n)RETURNn'))edges=map(buildEdges,graph.cypher.execute('MATCH()-[r]->()RETURNr'))

returnjsonify(elements={"nodes":nodes,"edges":edges})

if__name__=='__main__':app.run(debug=True)这段代码用到了很多py2neo的函数,如果不熟悉的可以回到前一个博客看看它们的用法。

code.js中的$.get('/graph',function(result){},'json')会调用到代码中的25-30行。

代码27行,nodes=map(buildNodes,graph.cypher.execute('MATCH(n)RETURNn'))。

graph.cypher.execute('MATCH(n)RETURNn')获取了Movie库的所有节点。map()对每个节点调用buildNodes(nodeRecord)函数,生成数组nodes(例如[{"data":{"born":1962,"id":"189","label":"Person","name":"TomCruise"}},/*node2*/,/*node3*/,...])。

代码28行,edges=map(buildEdges,graph.cypher.execute('MATCH()-[r]->()RETURNr'))生成了所有的边。

代码30行,用Flask的jsonify函数把elements转成JSON格式返回给前端。

运行我们的代码吧!写完了所有的代码,是时候来看看我们的劳动成果了。让我们来启动我们的网站,看看Movie库的网络关系图显示出来的效果吧。你需要:

运行如下命令启动Flask网站。

这里看到的关系图只是关系图的一小部分,你可以用鼠标滚轮来缩小放大来看到全貌。

到此,大家应该通过这三篇博客了解到如何利用neo4j,Flask,py2neo,cytoscape.js来显示neo4j的网络关系图了。

THE END
1.请问,为什么我用cytoscape做出来的图,连接是用曲线表示?如题,请问,为什么我用cytoscape做出来的图,连接是用曲线表示?我想用直线表示,曲线看起来太乱了。 有懂的大神,麻烦提供将曲线改为直线的详细步骤。多谢! 1.jpg回复此楼? 猜你喜欢磷酸酚酯合成 已经有1人回复 三氯氧磷跟酚 已经有1人回复 化学工程及工业化学论文润色/翻译怎么收费? 已经有68人回复 关于...https://muchong.com/t-12325320-1-authorid-4544154
2.Cytoscape软件使用教程蛋白互作网络图构建Cytoscape的使用包括以下几个步骤: 1、新建txt的输入文件,这个文件一般至少含有两列,就是需要做分析的,相互作用的两类symbol,当然也可以更复杂的调控。比如lncRNA-miRNA-mRNA的调控网络,就含有lncRNA和miRNA的关系,miRNA与mRNA的关系。 这里如果需要做比较负责的图,这里还需要准备另外一个txt输入文件,就是两类symbol...https://www.biowolf.cn/Video/6.html
3.数据分析软件有哪些分类?数据分析情报分析师我平时工作总和数据打交道,但是不会 SQL、也不懂开发语言,最近几年,大家都说 python 好用,不过我是对代码、字母什么的一点不来电,怎么也看不明白,原来就一直用 excel,随着商业数据可视化工具的发展,分析处理数据的时候,确实比之前更直观了,做一些数据的统计,不同维度的 BI 可视化展示,图表都很漂亮,做 PPT 报告...https://xie.infoq.cn/article/d5a9234488e403da7b2ecb8ad
4.Cytoscape作蛋白互作PPI图最后感叹一下,做这个这是很麻烦,在R里面几行代码就可以搞定,做出的图还高清无码,真的很麻烦,如果不能很好说明生物学意义的话,没必要用Cytoscape。 至于Cytoscape前期的String讲解以及Adobe Illustrator就是下一次的讲解啦(随缘学习),有上面的部分,做一个PPI图已经不难了~~~...https://www.jianshu.com/p/79de262d224b
5.5网络图绘制软件cytoscape使用介绍美吉生物讲义.pdf网络图绘制软件cytoscape使用 微生物事业部 meta@majorbio. 本节课准备工作: 网络图绘制软件cytoscape使用 1、确保自己的电脑上已经安装了cytoscape软件,并且可以打开; 2、登陆isanger账号、运行云平台上的物种相关性网络 ,以备文件 ; 3、确保已 用于绘图的表格文件; 网络图绘制软件cytoscape使用 1 cytoscape软件背 2 ...https://max.book118.com/html/2021/0311/8022023055003057.shtm
1.Origin软件保存曲线图的详细步骤(origin怎么保存做的曲线...设置完成后,点击“确定”,Origin会开始保存曲线图。稍等片刻,曲线图便保存成功。 另外,如果你想保存曲线图的原始数据及其关联的绘图设置,可以选择“文件”菜单中的“保存项目”或“另存为项目”。这样,你可以在任何时候打开这个项目文件,所有的数据和图形设置都会保持原样。 http://origin.zaixianjisuan.com/jiqiao/originruan-jian-bao-cun-qu-xian-tu-de-xiang-xi-bu-zhou.html
2.如何用Cytoscape::EnrichmentMap可视化GSEA的运算结果?愿武艺晴小朋友一定得每天都开心! 第一步:下载安装GSEA 4.3.3的桌面版;安装好后的界面如下图所示: 第二步:下载C5 数据集下的GO subset of BP的基因集,点击Gene Symbols,下载基因ID为Symbol号的gmt格式文件。(人和小鼠是两个不一样的链接,要按自己的实际下载) ...https://blog.csdn.net/jl19930703/article/details/144144222
3.Cytoscape的使用方法(带图片解析)最近在做网络构建的课题,用到了cytoscape软件,所以把软件的用法总结了一下。cytoscape是由许多研究单位共同合作开发的一个开放源码的生物信息分析软件。研究单位包括加州大学圣地亚哥分校的TreyIdeker实验室,加州大学旧金山分校的BruceConklin实...https://m.wang1314.com/doc/webapp/topic/20963015.html
4.如何将Cytoscape.js图形导出为图像?转载推荐:项目无论是用于自己的应用,还是找开源项目贡献代码,这些都是不错的选择~ 1. Cytoscape.js 06 前端数据可视化之 --- (一)亿级关系图 在这之前,提起数据可视化,我都是能用echarts尽量用echarts,特效很棒而且用起来简单,粘贴一个option改个data就能生成很酷炫的报表,但是真正走向数据可视化领域之后,还是...https://cloud.tencent.com/developer/information/%E5%A6%82%E4%BD%95%E5%B0%86Cytoscape.js%E5%9B%BE%E5%BD%A2%E5%AF%BC%E5%87%BA%E4%B8%BA%E5%9B%BE%E5%83%8F%EF%BC%9F
5.求助cytoscape如何保存清晰图片学习交流互助专区这个帖子发布于 10 年零 139 天前,其中的信息可能已发生改变或有所发展。 用cytoscape做了个图,exprot的时候不管选哪种图片格式,保存的图片都很小,清晰度很低,根本看不清;BUT,保存成pdf格式虽然也很小,但是图在pdf里非常清楚。但是我们需要的是图片格式的。求助。https://3g.dxy.cn/bbs/topic/33499136
6.代谢网络图四部曲(三)建国70周年国庆阅兵中,整齐划一高颜值的方队,短时间内就获得了大家一致的转发和称赞,各位老师是否也想要在文章中放入规整又高颜值的网络图,获得读者的转发和称赞呢,敬请收看本期推送:代谢网络图四部曲(三)--如何快速掌握Cytoscape。将从Cytoscape简介及安装、软件操作界面解读等内容为大家进行介绍,希望通过软件操作的解读...https://www.antpedia.com/wxarticle/index.php?id=366032
7.如何在Vue3中使用Cytoscape.js创建交互式网络图此HTML代码创建一个带有ID为“cy”的div元素。此元素将用作Cytoscape.js网络图的容器。 加载网络图数据 const jsUrls = [ 'https://cdn.polyfill.io/v2/polyfill.min.js?features=Promise,fetch', 'cytoscape/documentation/js/cytoscape.min.js', https://blog.51cto.com/u_16718678/11216041
8.Cytoscape软件使用之STRING的PPI文本文件导入画连通图最近在用cytoscape软件分析我DGEs的蛋白互作网络图,用到了这个软件中的节点和边的设置,以及网络节点根据各种算法来布局。下面我将按照五个部分来介绍,分别是数据导入,节点设置,边设置,布局展示,图片/文件导出。说明下我的cytoscape是3.7.1的,安装的时候java环境是jdk8 一、数据导入 1、我们事先在STRIN... ...https://www.pianshen.com/article/99532399902/