在为使用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;}
答案 0 :(得分:1)
我很确定这是不可能的。如果你点击" Style"弹出窗口的选项卡,然后单击"查看样式表"您将在GRASS文件中看到颜色与节点标签相关联。如果您想要一种不同类型的可视化,您可以提交拉取请求:
https://github.com/neo4j/neo4j/tree/master/community/browser
重要的是要注意GRASS格式是为Neo4j创建的,据我所知,它并没有在其他任何地方使用,所以不要在任何地方寻找标准文档。
或者,根据您正在做的事情,您可以创建自己的可视化。对于网络,有许多库,如Sigma.js或D3。我也一直想玩这个(基于Sigma.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)
即使我来晚了一点,也想帮助可能正在寻找方法的其他人。无法基于属性更改节点的颜色,但是有一种方法可以通过基于属性创建节点来实现。请记住,应用这些查询后,您的数据将不会相同。因此,始终备份数据始终是一个好主意。
默认情况下(之前),这是标签着色的方式:
基于属性的颜色
假设有一个名为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 *
这将按国籍返回所有人。现在您可以按国籍国进行着色。下面显示了一个示例。
基于属性的颜色并加载其他标签
假设您还有一个名为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 *
它将返回具有所有关系的个案和聚类。下面显示了示例。
如果这有帮助,请进行投票,并希望让其他人知道这是可以接受的答案。谢谢。