4

下面的代码不会呈现我的图表。

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()
4

2 回答 2

6

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

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

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

您可以通过导入数据文件(Networkx 有相当多的模块来转换格式)或使用 Networkx 的图形生成器之一在 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 构造函数 DiGraph 将 NumPy 数组转换为 Networkx

>>> 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()

在此处输入图像描述

于 2012-05-08T05:05:57.907 回答
0

当您运行此脚本时H(x,y,gamma)HenonIterate(x0,y0,n,gamma)g()得到定义。这就是发生的一切。

如果要在脚本末尾运行 g(),请添加g().

然后它抱怨该HenonMap函数未定义。一定要找到一个合适的实现,它接受 6 个参数。

于 2012-05-08T05:04:04.953 回答