【问题标题】:graphing a relationship matrix in python在python中绘制关系矩阵
【发布时间】:2011-03-24 16:01:08
【问题描述】:

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

【问题讨论】:

    标签: python wxpython numpy matplotlib networkx


    【解决方案1】:

    在我看来,您的主要抱怨在于 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】:

      我只是使用 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

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 2018-12-05
        • 2020-03-31
        • 1970-01-01
        • 2016-12-08
        • 2015-09-21
        • 1970-01-01
        • 2015-06-08
        • 2020-03-20
        相关资源
        最近更新 更多