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は、グラフを生成し、分析し、Matplotlib または Graphviz を介してレンダリングするための優れた Python ライブラリです。例えば、

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

Networkx でグラフを作成するには、データ ファイルをインポートするか (Networkx にはフォーマット間で変換するためのかなりのモジュールがあります)、Networkx の gtraph ジェネレーターの 1 つを使用します。以下に示すグラフを生成するには、特定のタイプの二項ランダム グラフerdos-renyi を作成します。

Networkx でグラフを作成するには、グラフ コンストラクターを呼び出して、目的のノード数とエッジ作成確率を渡します。

G = NX.erdos_renyi_graph(10, .3)

このグラフを Networkx でレンダリングするのは簡単です。draw を呼び出しグラフに渡すだけです。舞台裏で、Network は、Matplotlib でグラフをレンダリングするために必要なすべてのデータ (ノード位置、スタイル属性、ラベルなど) を渡し、Matplotlib のplotメソッドを呼び出して、このすべてのデータを渡します。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 コンストラクターである 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 に答える