|
|
最近のBLTはvectorなどtkウィジェットでないものだけをtclで使うBLTliteと、
tkウィジェットも含んだフルセットのBLTの二つがあって、最初にtkをロード
しておかないとpackage require BLTしたときにBLTliteの方がロードされて
しまうので注意。 BLTのグラフ描画ウィジェット †
基本的な使い方 †package require Tk
package require BLT
pack [blt::graph .g]
.g element create e1 -xdata {1 2 3 4} -ydata {1 2 4 8}
グラフを作ってエレメントを追加。複数のエレメントを追加したら複数のグラフが表示される。エレメントのデータや見た目を変えるには.g element configure ~で色々変えられる。データの設定は-xdata -ydataの組み合わせか、-dataでxyの値のペアの平リストかのどっちか(どっちでもいい)でする。 オプション †見た目の改善はたくさんオプションがあるので適当にいじればいいと思う・・・。 折れ線エレメントのオプション .g element configure elemName options
棒グラフエレメントのオプション .g element configure elemName options
グラフのオプション .g configure options
目盛りのオプション .g axis configure axisName options みたいな。x y とx2 y2がデフォで存在し、それぞれグラフの4辺に対応している。 x2 y2はデフォルトで非表示になっている。自分で追加することもできる。 目盛りは基本的に数値しか使えないが、limitsformatを使って細工することで 文字を入れることもできる。
棒グラフで横棒のグラフにする †.g configure -invertxy 1 これをするとbottom側がxの小さい値でtop側が大きい値になる。反対にするにはさらに .g axis configure x -descending 1 する。 ついでに右寄せにするには .g axis configure y -descending 1 する。 グラフのグリッドを表示する †折れ線ではデフォルトでOFFになっている .g grid on blt::bitmap †ビットマップを作成するコマンド。棒グラフの背景に使ったりする。 blt::bitmap define bitmapName data ?option value?... blt::bitmap compose bitmapName text ?option value?... blt::bitmap exists bitmapName blt::bitmap source bitmapName blt::bitmap data bitmapName blt::bitmap height bitmapName blt::bitmap width bitmapName ビットマップを作るには blt::bitmap define pattern1 { {4 4} {0x01 0x02 0x04 0x08} }
みたいな。ここはx11 bitmapのデータをそのまま流し込んでもよいらしい。 ここで指定してるデータは省略形で最初のリストがwidth,heightで次のリストがデータ。 この例では斜め線を引く。 0x01 : 1000 0x02 : 0100 0x04 : 0010 0x08 : 0001 みたいな。あとこれに-rotateや-scaleオプションも付けられるらしい。 blt::bitmap define pattern1 { {4 4} {0x01 0x02 0x04 0x08} } -scale 5.0
package require Tk
package require BLT
blt::bitmap define pt1 { {4 4} {0x01 0x02 0x04 0x08} } ;#斜め線1
blt::bitmap define pt2 { {4 4} {0x08 0x04 0x02 0x01} } ;#斜め線2
blt::bitmap define pt3 { {4 4} {0x0F 0x00 0x00 0x00} } ;#横線
blt::bitmap define pt4 { {4 4} {0x01 0x01 0x01 0x01} } ;#縦線
blt::bitmap define pt5 { {4 4} {0x0F 0x01 0x01 0x01} } ;#クロス
pack .g [blt::barchart .g]
.g element create e -xdata {1 2 3 4} -ydata {1 2 4 8} -background lightblue
foreach n {pt1 pt2 pt3 pt4 pt5
error gray12 gray25 gray50 gray75 question questhead warning} {
button .$n -text $n -command ".g element configure e -stipple $n"
pack .$n -side left
}
blt::vector †vectorは数値のシーケンスで、グラフのエレメントの-xdata -ydataに その名前を渡すと、動的にグラフを更新していくことができる。 package require Tk
package require BLT
blt::vector vecx vecy
pack [blt::stripchart .g]
.g axis configure x -autorange 10 -shiftby 1
.g element create e -xdata vecx -ydata vecy
proc plot {} {
vecx append [clock seconds]
vecy append [expr rand()]
after 1000 plot
}
plot
みたいな。 組み込み関数 †Blt_ActiveLegend .g ;#Legendのクリックでエレメントを選択
Blt_Crosshairs .g ;#カーソルの十字線を表示
Blt_ResetCrosshairs .g status ;#statusはon off toggle configureとか
Blt_PrintKey .g ;#Shift-右クリックでPostscript出力。日本語フォントが変。
;#namespace import blt::*しないと動かない。要改造。
Blt_ClosestPoint .g ;#Ctrl-中クリックで一番近いポイントを表示する。バグ有。
Blt_ZoomStack .g ;#右クリックで範囲を選択してズームインする
Blt_ActiveLegendとBlt_ZoomStackはよく使う。 こまかく挙動を制御したいときは自分で実装することもできる。 |