Python networkx:为一个节点显示不同的颜色
我有一个子图列表,我想在一张图片中打印它,我在图G中添加了所有节点,但我想保留我的子图的信息,所以我给每个节点一种颜色,当一个节点属于两个子图时,它有两种颜色(3是属于3,4到4,…) 我的问题是在一张图片中显示节点及其所有颜色部分和标签,当然是在wright位置。 我也想在图片中添加背景,这张图片不会出现在同一个绘图中,但我会在同一个绘图中显示它Python networkx:为一个节点显示不同的颜色,python,python-3.x,matplotlib,graph,networkx,Python,Python 3.x,Matplotlib,Graph,Networkx,我有一个子图列表,我想在一张图片中打印它,我在图G中添加了所有节点,但我想保留我的子图的信息,所以我给每个节点一种颜色,当一个节点属于两个子图时,它有两种颜色(3是属于3,4到4,…) 我的问题是在一张图片中显示节点及其所有颜色部分和标签,当然是在wright位置。 我也想在图片中添加背景,这张图片不会出现在同一个绘图中,但我会在同一个绘图中显示它 plt.图(figsize=(22,18)) plt.imshow(背景,原点='lower',cmap='binary',alpha=0.5) 节
plt.图(figsize=(22,18))
plt.imshow(背景,原点='lower',cmap='binary',alpha=0.5)
节点=nx.绘制网络x\u节点(G,pos=posi)
nx.绘制网络x_标签(G,pos=posi)
对于G.nodes()中的节点:
plt.pie([1]*pgm,center=posi[node],colors=[cmap(a)表示颜色中的[node]]
plt.show()
plt.close()
我的灵感来自
你知道我如何给同一个节点赋予不同的颜色,并在同一张图片中打印它们的标签和背景吗?不优雅或高效,但我认为这应该满足你的要求
# dummy graph
df1 = pd.DataFrame({a:np.random.randint(0,8,100) for a in 'ab'})
df2 = pd.DataFrame({a:np.random.randint(5,15,100) for a in 'ab'})
df3 = pd.DataFrame({a:np.random.randint(12,20,100) for a in 'ab'})
df4 = pd.DataFrame({a:np.random.randint(19,25,100) for a in 'ab'})
graphs = []
for i, df in enumerate([df1,df2,df3,df4]):
G = nx.from_pandas_edgelist(df, source='a', target='b')
for node in G.nodes:
G.nodes[node]['part_of'] = []
graphs.append(G.copy())
F = nx.Graph()
for G in graphs:
F = nx.compose(F,G)
# actual answer
for node in F.nodes():
for i, G in enumerate(graphs):
if node in G.nodes():
F.nodes[node]['part_of'].append(i)
pos = nx.spring_layout(F)
fig = plt.figure(figsize=(10,10))
cmap=plt.cm.viridis
nx.draw_networkx_edges(F, pos=pos,)
for node in F.nodes():
part_of = list(set(F.nodes[node]['part_of']))
w = plt.pie(
[1]*len(part_of),
center= pos[node],
colors=[cmap(q/len(graphs)) for q in part_of],
radius=0.05,
)
plt.xlim(-2,2)
plt.ylim(-2,2)
您可以看到一些节点有两种颜色:
这是我照片的一部分我只是截图
对不起,在我的代码中有法语注释,有时我忘了用英语注释
我有这样的想法:
def plot3(List, background) :
graphs = []
for i, df in enumerate(List[0]):
G = List[0][i]
for node in G.nodes:
G.nodes[node]['part_of'] = []
graphs.append(G.copy())
F = nx.Graph()
for G in graphs:
F = nx.compose(F,G)
nx.draw(F)
print(F.number_of_nodes(), F.number_of_edges())
print(len(List[0]))
for node in F.nodes():
for i, G in enumerate(graphs):
if node in G.nodes():
F.nodes[node]['part_of'].append(i)
pos = nx.spring_layout(F)
fig = plt.figure(figsize=(10,10))
nx.draw_networkx_edges(F, with_labels=False, node_size=50, pos=pos, alpha=.3)# node_color=colors,
cmap=plt.cm.viridis
for node in F.nodes():
part_of = list(set(F.nodes[node]['part_of']))
w = plt.pie(
[1]*len(part_of),
center= pos[node],
colors=[cmap(q/len(graphs)) for q in part_of],
radius=0.05,
)
return 1
我想给一个节点赋予不同的颜色。使用nx.draw\u networkx的node\u颜色,你应该只为每个节点赋予一种颜色,每个节点一种颜色。是的,但不是我想的那样,让我2分钟我给你看我的代码和一张图片如果我的电脑让我这么做的话是的对不起我这么做了可能是我应该这样做:我为每个节点创建一个包含n种颜色的表格,如果节点应该有一种颜色,n种颜色是相同的,如果它应该有2种颜色,一半是1种颜色,第二部分是其他颜色
def plot3(List, background) :
graphs = []
for i, df in enumerate(List[0]):
G = List[0][i]
for node in G.nodes:
G.nodes[node]['part_of'] = []
graphs.append(G.copy())
F = nx.Graph()
for G in graphs:
F = nx.compose(F,G)
nx.draw(F)
print(F.number_of_nodes(), F.number_of_edges())
print(len(List[0]))
for node in F.nodes():
for i, G in enumerate(graphs):
if node in G.nodes():
F.nodes[node]['part_of'].append(i)
pos = nx.spring_layout(F)
fig = plt.figure(figsize=(10,10))
nx.draw_networkx_edges(F, with_labels=False, node_size=50, pos=pos, alpha=.3)# node_color=colors,
cmap=plt.cm.viridis
for node in F.nodes():
part_of = list(set(F.nodes[node]['part_of']))
w = plt.pie(
[1]*len(part_of),
center= pos[node],
colors=[cmap(q/len(graphs)) for q in part_of],
radius=0.05,
)
return 1