グラフ描画

この節では目盛りとラベルを付けられるグラフの描画機能について説明します。下に単純なグラフ描画のコード例を示します。

from visual.graph import * # グラフ機能をインポートします

 

funct1 = gcurve(color=color.cyan) # 繋がった curve オブジェクトです

 

for x in arange(0., 8.1, 0.1): # x は 0 から 8 まで変化します

    funct1.plot(pos=(x,5.*cos(2.*x)*exp(-0.2*x))) # 描画します

visual.graph をインポートするとグラフ描画モジュールと全ての Visual オブジェクトを使えるようになります(訳注 from visual.graph import * だけで sphere などが visual を import したときと同様に使えるようになります)。グラフは全てのデータをウィンドウ内に表示するようにオートスケールになっています。

直線で繋がった点の集まり(gcurve)が、まさに幾つかのグラフ描画オブジェクトの一つです。他にも飛び飛びの点の集まり(gdots)縦棒の集まり(gvbars)、横棒の集まり(ghbars)、集積データの縦棒による表示(ghistogram)があります。これらのオブジェクトの一つを表示するとき色属性を指定できます。gvbarsghbarsについては、棒の幅となるdelta 属性も指定できます(デフォルトで delta=1.です)。

一つのグラフに一つ以上のものを描くこともできます。

funct1 = gcurve(color=color.cyan)

funct2 = gvbars(delta=0.05, color=color.blue)

for x in arange(0., 8.1, 0.1):

    funct1.plot(pos=(x,5.*cos(2.*x)*exp(-0.2*x))) # curve

    funct2.plot(pos=(x,4.*cos(0.5*x)*exp(-0.1*x))) # vbars

plot 操作の最中に、元々設定してあった色とは異る色を指定することもできます。

mydots.plot(pos=(x1,y1), color=color.green)

gcurve, gdots, gvbars, ghbars オブジェクトを作ると、普通の curve オブジェクトのときと同じように、描画のための点のリストを保持させることができます。

points = [(1,2), (3,4), (-5,2), (-5,-3)]

data = gdots(pos=points, color=color.blue)

このリストによる設定は gdots オブジェクトを生成するときしか使えません。

 

共通の gdisplay 指定

グラフ・ウィンドウ gdisplay について、そのサイズ/位置/タイトル・バー名を設定できます。x,y 軸のタイトルを指定できます。軸それぞれの最大値を指定できます。そのためには gcurve などのグラフ描画オブジェクトを生成する前に指定せねばなりません。

graph1 = gdisplay(x=0, y=0, width=600, height=150,

          title='N vs. t', xtitle='t', ytitle='N',

          xmax=50., xmin=-20., ymax=5E3, ymin=-2E3,

          foreground=color.black, background=color.white)

上の例では、グラフ・ウィンドウは (0,0) に置かれます。そのサイズは縦:550 横:600 ピクセルです。タイトルバーには「N vs. t」とかかれます。グラフの横軸のタイトルは「t」です。縦軸のそれは「N」です。全データを表示するオート・スケールの代わりに、グラフに限度が設定されています。水平軸は -20 から +50 までです。縦軸気 -2000 から +5000 までです。(xmin と ynin は負数で、また xmax と ymax は正数でなければなりません。「訳注:xmin, ymin を正数にしてやったら [0,xmax], [0,ymax] の範囲になりました」) 前景画像は黒色です(デフォルトは白色です)。背景画面は白色です(デフォルトは黒色です)。単純にgdisplay() とだけかくとデフォルト値 x=0, y=0, width=800, height=400 タイトルなし, オートスケールになります。

gdisplay オブジェクトは display 属性を持つので、基本的なグラフ描画ウィンドウの表示形態を操作できます。

graph1.display.visible = 0 # 見えなくします。グラフ・ウィンドウ自体が見えなくなります。

複数のグラフ描画ウインドウを使えます。別の gdisplayオブジェクトを作るだけです。デフォルトでグラフ描画ウィンドウはgdisplay ウインドウ上に表示されます(訳注:gdisplay ウインドウが一つだけならば、したのように gdisplay = graph1 引数がなくても、その gdispaly ウィンドウ上に、その設定で表示されます)。

energy = gdots(gdisplay=graph1, color=color.blue)

 

ヒストグラム(データの分類と蓄積)

ヒストグラム:ghistogram の目的はデータを分類分けして、その個数の分布を表示することです。様々の人々の年齢のリストのデータがあるものとします。[5, 37, 12, 21, 8, 63, 52, 75, 7] のようなデータです。このデータを 20 才刻みで分け、その人数を棒グラフ表示するものとします。最初の棒の箱には [0,20): 0 才以上、20 才未満の人が入ります。[5,12,8,7] の人たちです。次の箱には [20,40) 才の人たちが入ります。[21,37] の二人です。三つ目の箱には [40,60) 才の人であり [52] 一人です。四つ目の箱は [60,80) 才のひとであり [63,75] の二人です。下に、このデータを表示させる例を示します。

from visual.graph import *

.....

agelist1 = [5, 37, 12, 21, 8, 63, 52, 75, 7]

ages = ghistogram(bins=arange(0, 80, 20), color=color.red)

ages.plot(data=agelist1) # plot the age distribution

.....

ages.plot(data=agelist2) # plot a different distribution

データを割り振る先となる棒を bins 引数名の list データで指定できます。上の例では 0 から 80 までの 20 刻みの bins が与えられています。

上の python コードを実行した後に、下のコードを実行させると

ages.plot(data=agelist2)

前の棒グラフ表示が消されて、新しい棒グラフ表示に代わります。これがデフォルトの plot 機能です。

デフォルト機能ではなく、下のコードのように記述すると

ages.plot(data=agelist2, accumulate=1)

新しいデータは古い棒グラフに追加されていきます。

次のように記述すると

ghistogram(bins=arange(0,50,0.1), accumulate=1, average=1)

複数回の plot 操作を行ったとき、積算頻度ではなく、 積算頻度を plot 回数で割った平均頻度の棒グラフ表示になります。デフォルトでは積算と平均は行いません。accumulate=0, averate=0 です。

 

gdisplay と display

gdisplay ウインドウは display ウィンドウと密接に関連しています。主な違いは gdisplay が本質的に二次元表示であることと、x, y スケール因子が個別に設定されることです。また gcurve や他のグラフ・オブジェクトを作るとき、(明示的であるか否かに関わらず)別の gdisplay オブジェクトが作られることも大きな違いです。一方で display ウィンドウは残されます。使い続けられます。 sphere や box などの普通の Visual オブジェクトを後で生成したとき、それらは以前の display ウィンドウに重ねて表示されます。gdisplay のように新しいウィンドウに表示するわけではありません。