第一次在这里发布海报,所以请保持温柔.:)
我正在尝试在Networkx中绘制不同类型的字符网络,并希望为每种类型设置不同的节点形状.例如,我希望角色是圆形,生物是三角形等等.我试图想出这几个小时并且已经广泛搜索过了,但我还没有找到一种方法来实现这个目的而不是为每种类型的字符设置不同的node_lists并分别渲染它们,这似乎违反直觉.
问题是我无法从内部访问node_shape字典值:
nx.draw_networkx_nodes(G, pos)
Run Code Online (Sandbox Code Playgroud)
我尝试了多种解决方案,包括尝试访问节点属性,创建外部字典或列表以及从调用中访问它,设置列表理解或迭代器,似乎没有任何工作.
要么我传递一个列表,一个是批量提取的,一个字典,该函数无法哈希,或者一个列表的实例,例如shape_list.pop(0),在这种情况下,该函数只取第一个值并将其应用于所有节点.
我可以通过创建一个单独的node_colors列表来设置颜色,该列表由函数迭代,甚至尝试创建一个字典,以便node_shape由node_color触发,但这也不起作用.
我希望将代码用作在Python 3.4和Django 1.8中开发的Web应用程序的附加组件,因此Graphviz不是一个选项.
提前感谢您对替代图书馆的任何帮助或参考.
这是我的代码:
import json
import requests
import networkx as nx
import matplotlib.pyplot as plt
personas = 'http://story-chronicles.herokuapp.com/storyobjects/'
target = requests.get(personas)
x = target.json()
story_objects = {}
labels = {}
node_colors = []
for character in x:
name = character["name"]
story = character["story"]
c_type = character["c_type"]
story_objects[name] = {}
story_objects[name]['name'] = name
story_objects[name]['story'] = story
story_objects[name]['c_type'] = c_type
story_objects[name]['to_relationships'] = []
if character['c_type'] == "Character":
story_objects[name]['node_shape'] = 'o' …Run Code Online (Sandbox Code Playgroud)