这是我尝试添加颜色属性的代码部分。所以节点将用4种不同的颜色着色:最佳健身,更差,最佳健康前10%和更差10%。
for i in range(len(nodes)):
if nodes[i]==top:
NetGraph.node[i]['color']='r'
希望你能帮助我!干杯
答案 0 :(得分:2)
如果您尝试将存储在多个不同.nodes' and
。edges'文件中的关系数据“合并”到一个图形中,那么可能是从您遇到的磁盘中读取文件尚未添加到图表中的节点。
总的来说,我觉得需要更多信息才能为这个问题提供更有意义的答案。例如:.node
和.edge
文件的格式是什么? top
变量中的内容是什么? (这是表示阈值的列表或单个数字变量吗?)。
然而,根据到目前为止在这个问题中提到的内容,这里有一些指示:
首先尝试构建图形并稍后对其进行着色。如果您已经拥有健身数据,这可能会显得有效,但这将是让您使用一段代码的最简单方法。
确保您的节点ID确实是整数。也就是说,每个节点在图中已知其索引值。例如2,3,5等,而不是“Paris”,“London”,“Berlin”等(即字符串节点ID)。如果是后者,那么for将更好地形成为:for aNode in G.nodes(data = True):
。这将返回一个迭代器,其中包含每个节点的ID和一个包含所有现有节点数据的字典。
如果top
是单个变量,则将节点的ID与top
阈值进行比较是没有意义的。这就像是说22(它是一个节点ID)是否等于89(这是效率的某种表达)然后将红色应用于节点。 如果top
是列表,其中包含被视为 top 节点的所有节点,则条件表达式应为:if nodes[i] in top:
。
您似乎跳过了if
(?)以下的缩进。对于为条件为True
而赋予节点颜色的语句,为了工作,需要在右侧再缩进一组4个空格。
指定颜色的表达式是正确的。
请注意,Networkx会尝试将图表中出现的每个节点和边缘属性写入适当的格式。有关此问题的更多信息,请参阅对此问题的回复。因此,一旦您对给定图形(G)的结构感到满意,那么您只需调用networkx.write_graphml(G, 'mygraph.gml')
将其保存到磁盘(其中networkx
是模块的名称)。 networkx.write_*
函数会将图表的完整版本(G)导出为多种不同格式,或者如果数据类型无法正确序列化,则会引发异常。
我希望这会有所帮助。如果稍后会提供更多详细信息,请高兴地提出回复。