我有一个使用 Networkx 创建并使用 Mayavi 绘制的图形网络。
创建图表后,我将删除度数 < 2 的节点,使用G.remove_nodes_from()
. 删除节点后,连接到这些节点的边将被删除,但节点仍会出现在最终输出中(下图)。
import matplotlib.pyplot as plt
from mayavi import mlab
import numpy as np
import pandas as pd
pos = [[0.1, 2, 0.3], [40, 0.5, -10],
[0.1, -40, 0.3], [-49, 0.1, 2],
[10.3, 0.3, 0.4], [-109, 0.3, 0.4]]
pos = pd.DataFrame(pos, columns=['x', 'y', 'z'])
ed_ls = [(x, y) for x, y in zip(range(0, 5), range(1, 6))]
G = nx.Graph()
G.add_edges_from(ed_ls)
remove = [node for node, degree in dict(G.degree()).items() if degree < 2]
G.remove_nodes_from(remove)
pos.drop(pos.index[remove], inplace=True)
print(G.edges)
nx.draw(G)
plt.show()
mlab.figure(1, bgcolor=bgcolor)
mlab.clf()
for i, e in enumerate(G.edges()):
# ----------------------------------------------------------------------------
# the x,y, and z co-ordinates are here
pts = mlab.points3d(pos['x'], pos['y'], pos['z'],
scale_mode='none',
scale_factor=1)
# ----------------------------------------------------------------------------
pts.mlab_source.dataset.lines = np.array(G.edges())
tube = mlab.pipeline.tube(pts, tube_radius=edge_size)
mlab.pipeline.surface(tube, color=edge_color)
mlab.show() # interactive window
我想就如何删除已删除的节点和相应的位置并在输出中显示其余部分提出建议。
其次,我想知道如何以交互方式删除节点和连接到这些节点的边。例如,如果我想删除连接到度数 < 2 的节点的节点和边,首先我想显示一个交互式图形,其中所有度数 < 2 的节点都突出显示。用户可以以交互方式选择需要删除的节点。通过单击突出显示的节点,可以删除节点和连接边。
编辑:我试图通过在上面发布的完整代码中pos
包含更新来从数据框中删除已删除节点的位置。pos.drop(pos.index[remove], inplace=True)
但我仍然没有得到正确的输出。