Neo4j中的着色节点取决于属性

时间:2015-03-04 16:04:57

标签: colors neo4j graph-databases

在为使用Neo4j而启动的localhost页面上,很容易以不同的方式为特定节点着色。按照Neo4j中包含的电影示例;红色的人,紫色的电影,点击按钮将其变为橙色。

作为对此的扩展,我想为相同类型的节点着色,但以不同的方式使用不同的属性。以下为例;将性别作为属性添加到每个人节点,然后将男性蓝色和女性红色着色。

是否有可能在当前版本中实现这一点?我正在使用Neo4j Community 2.1.7。

编辑:有一个负责可视化的.grass文件的请求。这是一个小的摘录,负责着色一类节点。

node.Page {
  color: #30B6AF;
  border-color: #46A39E;
  text-color-internal: #FFFFFF;
  diameter: 80px;
  border-width: 2px;
  caption: '{pagename}';
  font-size: 10px;}

3 个答案:

答案 0 :(得分:1)

我很确定这是不可能的。如果你点击" Style"弹出窗口的选项卡,然后单击"查看样式表"您将在GRASS文件中看到颜色与节点标签相关联。如果您想要一种不同类型的可视化,您可以提交拉取请求:

https://github.com/neo4j/neo4j/tree/master/community/browser

重要的是要注意GRASS格式是为Neo4j创建的,据我所知,它并没有在其他任何地方使用,所以不要在任何地方寻找标准文档。

或者,根据您正在做的事情,您可以创建自己的可视化。对于网络,有许多库,如Sigma.js或D3。我也一直想玩这个(基于Sigma.js),但还没有机会:

https://github.com/Linkurious/linkurious.js

答案 1 :(得分:0)

我找到了一种解决方法-虚拟子图。基于APOC page

“您可以创建图形以外的数据的可视表示形式

基本上,您可以使用apoc.create.vNode创建节点的虚拟副本,并根据属性值为这些虚拟节点分配不同的类型。在您的情况下,将出现两种新类型的节点:男人女人。然后,您可以自由地为“男人”节点和“女人”节点分配不同的颜色/样式。

您的代码应类似于:

UNWIND ['men', 'women'] as gender 
MATCH (n:Person {Gender:gender}) 
CALL apoc.create.vNode([gender],{id:n.id}) yield node as vPerson 
RETURN vPerson

如果要显示(同性之间的)关系,请注释掉上面的最后一行并添加以下查询:

WITH apoc.map.groupBy(collect(vPerson),'id') as vPersons, gender 
WITH vPersons, [(p1:Person {Gender:gender})-[r]->(p2:Person {Gender:gender}) | apoc.create.vRelationship(vPersons[p1.id], type(r), {}, vPersons[p2.id])] as rels 
RETURN vPersons, rels

答案 2 :(得分:0)

即使我来晚了一点,也想帮助可能正在寻找方法的其他人。无法基于属性更改节点的颜色,但是有一种方法可以通过基于属性创建节点来实现。请记住,应用这些查询后,您的数据将不会相同。因此,始终备份数据始终是一个好主意。

默认情况下(之前),这是标签着色的方式:

enter image description here

基于属性的颜色

假设有一个名为Case且属性为nationality的标签,您想根据国籍为节点着色。因此,以下查询可用于创建国籍属性以外的标签。为此,您将需要安装apoc库。检查here进行安装。

// BY NATIONALITY
MATCH (n:Case)
WITH DISTINCT n.nationality AS nationality, collect(DISTINCT n) AS persons
CALL apoc.create.addLabels(persons, [apoc.text.upperCamelCase(nationality)]) YIELD node
RETURN *

这将按国籍返回所有人。现在您可以按国籍国进行着色。下面显示了一个示例。

enter image description here

基于属性的颜色并加载其他标签

假设您还有一个名为Cluster的标签。案例通过关系附加到群集。只需将查询更改为following即可获得群集及其与案例的关系。

//BY NATIONALITY WITH CLUSTERS
MATCH (n:Case),(c:Cluster)
WITH DISTINCT n.nationality AS nationality, 
    collect(DISTINCT n) AS persons,
    collect(DISTINCT c) AS clusters
CALL apoc.create.addLabels(persons, [apoc.text.upperCamelCase(nationality)]) YIELD node
RETURN *

它将返回具有所有关系的个案和聚类。下面显示了示例。

enter image description here

如果这有帮助,请进行投票,并希望让其他人知道这是可以接受的答案。谢谢。

相关问题