首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中绘制关系矩阵

在python中绘制关系矩阵
EN

Stack Overflow用户
提问于 2011-03-25 00:01:08
回答 2查看 1.2K关注 0票数 1

我有一个使用wxpython的python界面,它允许用户填充一个矩阵(0/1),然后为他们绘制图形。该程序创建一个numpy矩阵,然后在该矩阵的基础上生成networkx图,然后使用matplotlib.pylab显示该图。

numpy是必须的,因为程序还会做其他事情,比如获取传递闭包、自反闭包和对称闭包...至于networkx,如果你推荐其他更好的方法来绘制矩阵,我可以使用其他的东西,至于matplotlib,我讨厌它,如果你知道任何其他显示图形的方法,请给我建议。

matplotlib是我的问题的根源,当用户单击图形按钮时,我的程序读取矩阵,制作图形,matplotlib在新窗口中显示它(默认情况下)。现在,如果用户没有首先关闭matplotlib窗口就返回到原始窗口并绘制不同的矩阵,程序就会崩溃。

另外,在我看来,关系“箭头”的绘制方式并不吸引人。

我需要一种更好的方法来绘制我的矩阵,或者至少作为一种强制关闭myplotlib窗口的方法,我尝试了plt.close(),但这不起作用,窗口将保持打开状态,两个窗口都会显示(没有响应),我必须结束进程。

这是正在讨论的代码的一部分:

代码语言:javascript
复制
import numpy as np
import networkx as nx
import matplotlib.pylab as plt

... ...。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2011-04-17 09:18:52

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

http://wiki.scipy.org/Matplotlib_figure_in_a_wx_panel (更新)

事情会变得有点复杂。基本上,您应该复制代码并替换"DemoPlotPanel.draw()“方法。您需要修改代码以指定要在其上绘制的轴。它隐藏在networkx文档中:

http://networkx.lanl.gov/reference/drawing.html

票数 2
EN

Stack Overflow用户

发布于 2011-04-16 01:08:35

我只是使用Networkx文档的一个示例:

代码语言:javascript
复制
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()语句没有意义,你应该删除it.You还应该计算你节点的坐标,句子pos=nx.spring_layout(G)做到了这一点。你调用一个特定的布局算法,并提供你的图G,你会得到一个字典,返回每个节点的x和y坐标。

请仔细查看以下示例:http://networkx.lanl.gov/gallery.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5422009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档