2007年10月2日火曜日

またまたpythonで!

pythonで実はデータをプロットする事が出来ます。
Matlibplotというツールをインストールするとグラフを書くことが出来ます。

y=exp(-(x-0.5)^2)をプロットしてみましょう。
http://matplotlib.sourceforge.net/

----python---script---

import math
def gaussfunc(x,a,b):
return math.exp(-a*(x-b)*(x-b))
from pylab import *
x = arange(-2.0, 2.0, 0.01)
y=[]
for e in x:
y.append(gaussfunc(e,1.0,0.5))

plot(x, y, linewidth=1.0)
show()

----python script----

上のスクリプトを実行すると、したのようなグラフが出てきます。Gauss関数を変えられるようにしています。




次に三次元関数z=exp(-1.0*x^2-0.1*y^2)*(xy+x+y)をプロットしてみると…

----python---script---


import math
from pylab import *
def gaussfunc(x,y,a,b):
return exp(-a*(x)*(x)-b*(y)*(y))

dx, dy = 0.05, 0.05
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X,Y = meshgrid(x, y)
Z = gaussfunc(X, Y,1.0,0.5)*(Y*X+X+Y)
im = imshow(Z,origin='lower' ,alpha=.9)

cset = contour(Z, arange(-2.0,2.0,0.1), origin='lower' )

clabel(cset,
inline=1,
fmt='%1.1f',
fontsize=10)
hot()
colorbar()
show()



----python script----

このグラフはしたのようなグラフになります。ちょっと奇妙ですね(^^;)


自動的に等高線が引けるので、二次元マップを書くときには便利です。
二次元平面を細かいグリッドで切ることで、二次元の配列と考える事が出来ます。
そのグリッド上でのZの値を求めるために、XとYすら二次元配列と考える仕様になっていて、
XやYには二次元配列の要素で各xとyの値が代入されます。それをZに関数を通して
ほおりこむことで各グリッドでの値の計算しています。

Zの値を求めるときにはmathモジュールではなくて、pylabについているモジュールを
使う必要があるようです。

実体として、Zは二次元配列その物となります。二次元データがあれば、
上のimshowを使って絵をかけるし、等高線も自動的に引くことが可能です。

0 件のコメント: