NX Graph被放置在Matplotlib按钮中

snvhrwxg  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(126)

我正面临着试图将一个简单生成的Graph从图中的子图中分离出来的问题。
基本上,这个想法是,每当按下其中一个按钮时,图形中的节点应该改变颜色。我无法将图形与“下一步”按钮分开。而且似乎每当按下按钮时,按钮内的图形就会被取代。
任何想法,我如何可以分开的图形,并防止重叠的图形后,按钮按下?
下面是一个示例代码:

import matplotlib.pyplot as plt
import networkx as nx
from matplotlib.widgets import Button
from itertools import product

# Create the 2D graph and define the range
N = 6
G = nx.Graph()

for i in range(1, (N*N)+1):
    G.add_node(i)

def update_node_colors(colors):
    node_pos = list(product(range(0, N), repeat=2))
    pos = dict( (i + 1 + (N - 1 - j) * N, (i,j)) for i,j in node_pos )
    nx.draw(G, pos, with_labels=True, node_color=colors)
    plt.draw()

def prev_button(event):
    colors = ["yellow" for _ in G.nodes()]
    update_node_colors(colors)

def next_button(event):
    colors = ["red" for _ in G.nodes()]
    update_node_colors(colors)

fig, ax = plt.subplots(1, 1, figsize=(7,6))

# Give position to nodes
node_pos = list(product(range(0, N), repeat=2))
pos = dict( (i + 1 + (N - 1 - j) * N, (i,j)) for i,j in node_pos )

nx.draw(G, pos, with_labels=True)

plt.subplots_adjust(bottom=0.2)

ax_prev = plt.axes([0.85, 0.15, 0.15, 0.07])
button_prev = Button(ax_prev, "Prev", color = "green", hovercolor = "blue")
button_prev.on_clicked(prev_button)

ax_next = plt.axes([0.85, 0.05, 0.15, 0.07])
button_next = Button(ax_next, "Next", color = "orange", hovercolor = "red")
button_next.on_clicked(next_button)

#plt.axis('off')
plt.show()

字符串

voj3qocg

voj3qocg1#

你正在创建一个图形和一个轴:fig, ax = plt.subplots(1, 1, figsize=(7,6))稍后你通过plt.axes()创建了两个轴示例(ax_prevax_next)。当你这样做的时候,你的程序将焦点切换到最后创建的轴示例上。在这个例子中,这是ax_next。这意味着nx.draw()现在将使用这个轴来绘制。
要将焦点切换回主示例ax,可以使用plt.sca(ax)。然后nx.draw()将使用选定的主轴ax
最后的代码可能看起来像这样,例如:

def update_node_colors(colors):
    plt.sca(ax)
    node_pos = list(product(range(0, N), repeat=2))
    pos = dict( (i + 1 + (N - 1 - j) * N, (i,j)) for i,j in node_pos )
    nx.draw(G, pos, with_labels=True, node_color=colors)
    plt.draw()

字符串

相关问题