我正面临着试图将一个简单生成的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()
字符串
1条答案
按热度按时间voj3qocg1#
你正在创建一个图形和一个轴:
fig, ax = plt.subplots(1, 1, figsize=(7,6))
稍后你通过plt.axes()
创建了两个轴示例(ax_prev
和ax_next
)。当你这样做的时候,你的程序将焦点切换到最后创建的轴示例上。在这个例子中,这是ax_next
。这意味着nx.draw()
现在将使用这个轴来绘制。要将焦点切换回主示例
ax
,可以使用plt.sca(ax)
。然后nx.draw()
将使用选定的主轴ax
。最后的代码可能看起来像这样,例如:
字符串