在python中绘制关系矩阵

| 我有一个使用wxpython的python界面,该界面允许用户填写矩阵(0/1),然后为它们绘制图形。该程序创建一个numpy矩阵,然后从该矩阵中制作一个networkx图,然后使用matplotlib.pylab显示该图。 numpy是必须的,因为该程序还执行其他操作,例如获取传递,自反和对称闭包...至于networkx,如果您建议使用其他更好的图形矩阵,则我可以使用其他东西,而对于matplotlib,我讨厌它,如果您知道任何其他显示图形的方式,请提出建议。 matplotlib是问题的根源,当用户单击图形按钮时,我的程序读取矩阵,制作图形,然后matplotlib在新窗口中显示它(默认情况下)。现在,如果用户返回原始窗口并绘制另一个矩阵的图形而没有先关闭matplotlib窗口,则程序将崩溃。 我认为绘制“箭头”关系的方式也没有吸引力。 我需要一种更好的方式来绘制矩阵矩阵图,或者至少作为强制关闭myplotlib窗口的一种方式,我尝试了plt.close(),但是那没有用,该窗口将保持打开状态,并且两个窗口都会说(响应),我必须结束流程。 这是有问题的代码的一部分:
import numpy as np
import networkx as nx
import matplotlib.pylab as plt
... ... ...
def graph(values)
    plt.close()      #with or without this it does not work
    matrix = np.matrix(values)
    graph = nx.DiGraph(matrix)
    nx.draw(graph)
    plt.show()
    return
    
已邀请:
在我看来,您的主要抱怨是wx处理matplotlib窗口的方式。可以在您的wx窗口中嵌入Matplotlib图。这是一个例子: http://wiki.scipy.org/Matplotlib_figure_in_a_wx_panel(已更新) 它变得有点复杂。基本上,您应该复制代码并替换\“ DemoPlotPanel.draw()\”方法。您需要修改代码以指定要绘制的轴。它埋在networkx文档中: http://networkx.lanl.gov/reference/drawing.html     
我仅使用Networkx文档的示例:
try:  
    import matplotlib.pyplot as plt  
except:  
    raise  

import networkx as nx  

G=nx.star_graph(20)  
pos=nx.spring_layout(G)  
nx.draw(G,pos)  
plt.show() # display
因此,一开始的plt.close()语句没有意义,应将其删除。还应计算节点的坐标,句子pos = nx.spring_layout(G)可以做到这一点。您调用特定的布局算法并提供图形G,您将获得一个字典,以每个节点的x和y坐标作为回报。 请仔细查看以下示例:http://networkx.lanl.gov/gallery.html     

要回复问题请先登录注册