Python + Gnuplot (1) とりあえず使ってみる。
!!祝・ブログ開設!!
なんとなく初めて見ました。
というわけで、日々興味を持ったことを適当に書き連ねていきます。
まずは、Python+Gnuplot。
仕事でDBに突っ込んだデータを適当に分析してグラフ化したくなったので、とりあえずやってみることに。
覚書として書いておきます。
私のMac環境で必要なものは下記。
・Gnuplot
・Gnuplot.py
・Numpy
・Scipy
まずは適当に表示してみます。
こんな感じです。
cos(x)の関数を表示してみました。
ソースはこんな感じ。
えらく簡単ですね。
Gnuplotをimportして、あとはオブジェクト生成、gnuplotのコマンドを叩いていけばイケます。
/bin/python
# coding: UTF-8
import Gnuplot
gplot = Gnuplot.Gnuplot()
gplot.title("cos")
gplot("plot cos(x)")
これだけじゃつまらないので、こんなものも。
こんなソースです。
gnuplot初心者の私には、gnuplotの使い方がまず大事。
splotを使うと、x−y−zの3次元のグラフが描けるようです。
でもって、replotを使うと式を再評価して再度描画してくれます。
というわけで、グラフの式に時間の変数tを追加して、簡単にアニメーションにしてみました。
#! /usr/bin/python
# coding: UTF-8
import Gnuplot, time
gplot = Gnuplot.Gnuplot()
gplot.title("wave")
gplot("p1=60")
gplot("p2=70")
gplot("p3=1")
gplot("p4=1")
gplot("set pm3d")
gplot("set isosamples 40,40")
gplot("set xr[0:1.5]")
gplot("set yr[0:1.5]")
gplot("set zr[-1:1]")
gplot("t=0")
gplot("f(x,y,t)=sin(16*sqrt(x**2+y**2)+(t*0.2*pi))/(1+4*(x**2+y**2))")
gplot("set view p1,p2,p3,p4")
gplot("set terminal gif animate")
gplot("set output 'python+gnuplot_wave.gif'")
gplot("set tics font 'Times,18'")
gplot("splot f(x,y,t)")
i=0
while i<30:
time.sleep(0.2)
gplot("p2=p2+1")
gplot("set view p1,p2,p3,p4")
gplot("t=t+1")
gplot("replot")
i+=1
面に色をつけるのが
set pm3d
もっと綺麗な描画方法もあるようですが、とりあえずこれで十分です。
set isosamples 40,40
は、表示範囲の中でx,y軸それぞれを、いくつのポイントで値を評価するかですね。
この場合はx,y共に40箇所。計1600箇所です。
set xr[0:1.5]
set yr[0:1.5]
set zr[-1:1]
は、それぞれの軸の表示領域を設定します。
計算式はわかると思うので省略して、その次の
set view p1,p2,p3,p4
は、グラフを表示する位置・角度を設定しています。
これを変数化して、アニメーション中にグラフの周りを回るようにしています。
gplot("set terminal gif animate")
gplot("set output 'python+gnuplot_wave.gif'")
gplot("set tics font 'Times,18'")
ここはgifアニメーションとしてかき出すための設定です。
私はあまり使わなさそうなので、説明は省略。
あとは、時間tと表示角度p2をループの中で増やしていけばOK。
なんだか、ほとんどgnuplotの使い方になってますね・・・。
まぁ、Pythonからgnuplotを操作したということで良しとしましょう。
ただ、やりたいことは、DBのデータを元にgnuplotでグラフを表示すること。
次はsqlite3を繋いで、sqlite3内のデータをgnuplotに表示するようにします。