如何解决Python:如何根据某些值在Python中为节点图的颜色变化设置动画
您可以通过此要求的Python代码帮助我吗?
我正在用Python构建networkx图:
我的节点和边如下:
0 1
1 2
0 2
1 3
这是每个步骤中节点的状态:
Node1 Node2 Node3 Node4
0 1 2 3
1 2 3 0
2 3 0 1
这是我完成的图形的代码:
pos=nx.spring_layout(g)
plt.figure(figsize=(5,5))
nx.draw_networkx_nodes(g,pos)
nx.draw_networkx_edges(g,pos,width=0.2,node_size=500)
nx.draw_networkx_labels(g,with_lables=False)
plt.axis('off')
对于每种状态,颜色都不同。如何根据图形中每个节点的状态为颜色变化设置动画?
谢谢。
解决方法
所以,如果我正确理解了,您想制作一个动画,以每帧(步骤)的颜色显示节点的状态。您可以将节点状态作为颜色列表传递给node_color
方法中的draw
自变量,并且为了更新每个框架中的状态,您可以创建一个生成器并将其映射到其对应的颜色并进行更新在每个调用中通过调用next()
方法:
import matplotlib.pyplot as plt
import networkx as nx
import matplotlib.animation as animation
import matplotlib
matplotlib.use('TkAgg')
H = nx.from_edgelist([(0,1),(1,2),(0,3)])
pos = nx.spring_layout(H,iterations=200)
# here goes your statuses as a list of lists
statuses = [[0,1,2,3],[1,3,0],[2,1]]
colors = {0: 'red',1: 'green',2: 'blue',3: 'black'}
# create a generator from your statuses
# which yields the corresponding color map for each new status
def status():
for s in statuses:
yield list(map(lambda x: colors[x],s)) # map statuses to their colors
color_map = status()
def draw_next_status(n):
plt.cla()
c_map = next(color_map,colors.values())
nx.draw(H,pos,node_color=c_map,node_size=700,with_labels=True)
ani = animation.FuncAnimation(plt.gcf(),draw_next_status,interval=1000,frames=len(statuses),repeat=False)
plt.show()
这将为您提供:
如果要将其另存为gif文件,请将plt.show
替换为ani.save('anim.gif',writer='imagemagick')
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。