我正在使用 NetworkX 制作图表以导出以使用 Gephi 进行可视化。我一直在向图中的节点添加各种属性,没有问题,直到我尝试添加颜色。有谁知道如何使用 networkx 导出带有“彩色”节点的图形? (我一直在写一个 gexf 文件,但只要它与 Gephi 兼容,我不在乎它是否是另一种格式。)
这是我制作图表的代码:
def construct_weighted_graph(nodes, distance_dict, weighting_function, color = True):
G = nx.Graph()
#nodes automatically added when edges added.
for sequence in nodes: #loop through and add size attribute for num of sequences
G.add_node(sequence)
G.node[sequence]['size'] = distance_dict[sequence][1] #size represented by the node
if color:
G.node[sequence]['color'] = (0,1,0)
for i_node1 in range(len(nodes)):
dist_list = distance_dict[nodes[i_node1]][-2] #list of distances
for i_node2 in range(i_node1+1, len(nodes)):
G.add_edge(nodes[i_node1], nodes[i_node2],
weight = weighting_function(dist_list[i_node2]))
return G
这不是我对颜色的确切要求,因为不同的节点被分配了不同的颜色,但这是基本思想。
最佳答案
我遇到了完全相同的问题。在 NetworkX 中设置着色的正常方法不会导出为 GEXF 格式。通过阅读 NetworkX 和 GEXF 文档的导出代码,我找到了如何正确导出到 GEXF 并进而导入到 Gephi。
如果着色遵循 GEXF 的相同结构,则 NetworkX 会导出着色。必须将数据添加到图形内的节点。因此,您向节点添加了一个代表可视化的关键“viz”。您将 'viz' 设置为另一个字典,在其中添加一个键 'color',然后依次添加一个包含键 'r'、'g'、'b' 和 'a' 的值的字典。
我做了一个非常简单的例子来演示解决方案:
import networkx as nx
""" Create a graph with three nodes"""
graph = nx.Graph()
graph.add_node('red')
graph.add_node('green')
graph.add_node('blue')
""" Add color data """
graph.node['red']['viz'] = {'color': {'r': 255, 'g': 0, 'b': 0, 'a': 0}}
graph.node['green']['viz'] = {'color': {'r': 0, 'g': 255, 'b': 0, 'a': 0}}
graph.node['blue']['viz'] = {'color': {'r': 0, 'g': 0, 'b': 255, 'a': 0}}
""" Write to GEXF """
# Use 1.2draft so you do not get a deprecated warning in Gelphi
nx.write_gexf(graph, "file.gexf", version="1.2draft")
这会将带有红色、绿色和蓝色节点的图形导出到 GEXF。
您必须更改您尝试将颜色设置为的示例:
if color:
G.node[sequence]['viz'] = {'color': {'r': 0, 'g': 1, 'b': 0, 'a': 0}} # line changed
for i_node1 in range(len(nodes)):
关于colors - 将颜色属性添加到 NetworkX 上的节点以导出到 Gephi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522155/