所以我有以下功能来解决我正在努力的问题.它基本上是一个关键的节点检测问题或阻截.我有一些值x,并决定攻击节点z.基本上我想用活动和非活动节点以及正在处理/攻击的节点为我的图形着色.这是我到目前为止所拥有的.
def draw_solution(g,zsolution,xsolution,T,xmin = 0,filename ='test.pdf'):
# draw solution
pos = {n: ndata['coord'] for n,ndata in g.nodes_iter(data=True)}
ncolour=[]
for n,ndata in g.nodes_iter(data=True):
if ndata['fuel_load'] < xmin:
ncolour.append('gold')
else:
ncolour.append('yellowgreen')
pp = PdfPages(filename)
fig = plt.figure(figsize=(11.7,8.3))
fig.suptitle('full graph and initial fuel load')
plt.axis('off')
nx.draw_networkx(g, pos, font_size=9, node_color=ncolour)
fig.savefig(pp, format='pdf')
fig.clf()
for t in range(T):
g_copy = g.copy()
#node colour
ncolour=[]
for i in g.nodes_iter():
if zsolution[i,t] > 0.99:
ncolour.append('lightcoral')
#g_copy.remove_edges_from(g.edges(i))
elif xsolution[i,t] < xmin:
ncolour.append('gold')
g_copy.remove_edges_from(g.edges(i))
else:
ncolour.append('yellowgreen')
plt.axis('off')
fig.suptitle('t={}, before treatment'.format(t))
nx.draw_networkx(g_copy, pos, font_size=9, node_color=ncolour, label=ncolour)
fig.savefig(pp, format='pdf')
fig.clf()
g_copy = g.copy()
#node colour
ncolour=[]
for i in g.nodes_iter():
if zsolution[i,t] > 0.99:
ncolour.append('lightcoral')
g_copy.remove_edges_from(g.edges(i))
elif xsolution[i,t] < xmin:
ncolour.append('gold')
g_copy.remove_edges_from(g.edges(i))
else:
ncolour.append('yellowgreen')
plt.axis('off')
fig.suptitle('t={}, after treatment'.format(t))
nx.draw_networkx(g_copy, pos, font_size=9, node_color=ncolour, label=ncolour)
fig.savefig(pp, format='pdf')
fig.clf()
pp.close()
fig.clf()
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法得到传奇吗?
请帮忙!谢谢!
这就是你要追求的吗?
import networkx as nx
import matplotlib.pyplot as plt
G=nx.fast_gnp_random_graph(20,0.2)
rednodes = [1,2,4,5]
bluenodes = [10,12]
greennodes=[3,6,9]
yellowgreennodes = [node for node in G.nodes() if node not in rednodes+greennodes+bluenodes]
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos=pos,nodelist=rednodes, node_color='red', label='red nodes')
nx.draw_networkx_nodes(G,pos=pos,nodelist=bluenodes, node_color='blue', label='blue nodes')
nx.draw_networkx_nodes(G,pos=pos,nodelist=greennodes, node_color='green', label='green nodes')
nx.draw_networkx_nodes(G,pos=pos,nodelist=yellowgreennodes, node_color='yellowgreen', label='yellowgreen nodes')
nx.draw_networkx_edges(G,pos=pos)
plt.legend(numpoints = 1) #Instead of numpoints = 1, use scatterpoints = 1
plt.show()
Run Code Online (Sandbox Code Playgroud)
我不太清楚为什么它会在传奇中绘制多个点...我认为numpoints = 1会照顾到这一点. 编辑显然这可以通过以下方式处理:在matplotlib图例中设置numpoints不起作用
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |