python - 在 python 中编码和渲染(网络)图

标签 python numpy graph graph-theory

下面的代码没有呈现我的图表。

import numpy
import matplotlib.pyplot as plt
import matplotlib as mpl
import pylab
import random
import scipy
from matplotlib.mlab import griddata
from pylab import *
from scipy import ndimage
def H(x,y,gamma):
    val = HenonMap(x,y,1,1,0.2,gamma)
    return val
def HenonIterate(x0,y0,n,gamma):
    (x,y) = H(x0,y0,gamma)
    for i in xrange (0,n):
        (x,y)=H(x,y,gamma)
        if (pow(x,2)) + (pow(y,2)) > 100:
            return i
    return n

def g():
    x2=1000
    y2=1000
    max=100
    u = zeros([x2,y2])
    for x in range(x2):
        for y in range(y2):
            y0= .01*y-5.0
            x0= -.01*x+5.0
            u[x][y] = HenonIterate(x0,y0,max,1.03)
        imshow(u)
        show()

最佳答案

从您的代码来看,我不确定您的想法是什么,所以我很难直接使用它;但是,我可以向您展示如何在 Python 中创建图形并在 Matplotlib 中呈现它们。

Networkx是一个优秀的 python 库,用于生成图形、分析它们并通过 Matplotlib 或 Graphviz 渲染它们。例如,

from matplotlib import pyplot as MPL
import networkx as NX                  # import networkx

您可以通过导入数据文件(Networkx 有相当多的模块可以在格式之间进行转换)或使用 Networkx 的 gtraph 生成器之一在 Networkx 中创建图形。为了生成如下所示的图表,我创建了一种特殊类型的二项式随机图表 erdos-renyi

要在 Networkx 中创建图,我只需调用图构造函数并传入所需的节点数和边创建概率。

G = NX.erdos_renyi_graph(10, .3)

在 Networkx 中呈现此图很简单——只需调用 draw 并传入您的图。在幕后,Network 传递在 Matplotlib 中呈现图形所需的所有数据(例如,节点位置、样式属性、标签等)并为您调用 Matplotlib 的plot 方法,传递所有这些数据。用户需要与 Matplotlib 进行的唯一交互是调用 showsavefig 分别将其呈现在屏幕上或文件中。

NX.draw(G)
MPL.show()

如果您想自己生成图形,然后将其交给 Networkx 通过 Matplotlib 进行渲染,这也很简单。例如,在下面,我创建了一个 5 x 5 NumPy 数组 来表示一个邻接矩阵(表示稀疏图数据的最常见格式) :

>>> G = NP.random.randint(0, 2, 25).reshape(5, 5)
>>> G
  array([[0, 0, 1, 0, 1],
        [1, 0, 0, 1, 1],
        [0, 0, 1, 0, 1],
        [0, 0, 1, 1, 1],
        [0, 1, 0, 0, 1]])

现在使用有向图的标准 Networkx 构造函数将 NumPy 数组转换为 Networkx 图,DiGraph

>>> G1 = NX.DiGraph(G)

>>> len(G1.nodes())
      5
>>> type(G1)
      <class 'networkx.classes.digraph.DiGraph'>

您可以从邻接矩阵创建无向图来代替有向图;只需使用适当的构造函数,Graph

>>> G2 = NX.Graph(G)

这张图在 Matplotlib 中呈现,完全像上面那个——通过调用 Networkx 的 draw 方法,然后调用 Matplotlib 的 show 将其呈现在屏幕上。

>>> NX.draw(G2)
>>> MPL.show()

enter image description here

关于python - 在 python 中编码和渲染(网络)图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492535/

相关文章:

python - XPATH - 如何从 <br> 标签中获取内部 html 数据?

android - 在 React Native 中使用 python 库

python - 使用 Keras 进行 LSTM 预测

python - 在数组中执行按位左移操作时超出整数限制

Python:如何通过用户定义的函数拟合曲线?

c++ - 通过 QGraphicsItem 剪辑 QPainterPath

python - 比较对象并在列表中搜索

php - Facebook API : count attendees for event (limit problem)

algorithm - 为什么 DFS 在检查图是否为树时速度不够快

python - 在 PEP 3141 中,为什么 Number 没有 add 方法?