下面的代码无法呈现我的图表。
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()
答案 0 :(得分:6)
从你的代码看,我不确定你的想法,所以我很难直接使用它;但是,我可以告诉你如何在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中渲染此图表非常简单 - 只需调用 绘制 并传入图表即可。在幕后,网络传递在Matplotlib中渲染图形所需的所有数据(例如,节点位置,样式属性,标签等),并为您调用Matplotlib的 情节 方法传递所有这些数据。用户需要与Matplotlib进行的唯一交互是调用 show 或 savefig 分别在屏幕上或文件中呈现它。
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的 显示 以在屏幕上呈现它。
>>> NX.draw(G2)
>>> MPL.show()
答案 1 :(得分:0)
运行此脚本时,会定义H(x,y,gamma)
,HenonIterate(x0,y0,n,gamma)
和g()
。这就是发生的一切。
如果您想在脚本末尾运行g(),请添加g()
。
然后它抱怨没有定义HenonMap
函数。找到一个合适的实现,它接受6个参数。