用python绘制关系矩阵

用python绘制关系矩阵,python,wxpython,numpy,matplotlib,networkx,Python,Wxpython,Numpy,Matplotlib,Networkx,我有一个使用wxpython的python接口,它允许用户填写一个矩阵(0/1),然后为他们绘制图表。该程序创建一个numpy矩阵,然后用该矩阵生成一个networkx图形,然后使用matplotlib.pylab显示该图形 numpy是必须的,因为该程序还做其他事情,比如获取传递闭包、自反闭包和对称闭包。。。至于networkx,如果你推荐其他更好的矩阵绘图方法,我可以使用其他方法。至于matplotlib,我讨厌它。如果你知道任何其他显示图形的方法,请给出建议 matplotlib是问题的根

我有一个使用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
。。。 ...


我只是使用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\u layout(G)就是这样做的。调用一个特定的布局算法并提供图形G,然后得到一个字典,作为对每个节点的x和y坐标的回报


请仔细查看以下示例:

我认为您的主要抱怨是wx处理matplotlib窗口的方式。可以在wx窗口中嵌入Matplotlib图形。下面是一个例子:

(更新)

事情变得有点复杂了。基本上,您应该复制代码并替换“DemoPlotPanel.draw()”方法。您需要修改代码以指定要绘制的轴。它隐藏在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