最近のBLTはvectorなどtkウィジェットでないものだけをtclで使うBLTliteと、 tkウィジェットも含んだフルセットのBLTの二つがあって、最初にtkをロード しておかないとpackage require BLTしたときにBLTliteの方がロードされて しまうので注意。
あと後方互換性のためかnamespace import blt::*しとかないと動かないサンプル などもありげな予感。でもなるべくnamespace importしたくない。

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
-color線の色
-dashes線を点々にする。
-hide隠す
-labelラベル。legendに表示される。
-labelrelieflegendのレリーフ。
-linewidth折れ線の太さ。0にすると線は表示されない。
-symbolnone circle square diamond plus cross splus scross triangle arrow bitmap
-pixelssymbolの大きさ。
-showvalues値の表示。
-smoothlinear step natural quadratic。
-valueanchor値の表示位置。n e w s c
-valuecolor値の色。
-valuefont値のフォント。
-valueformat値の表示用フォーマット

棒グラフエレメントのオプション

.g element configure elemName options
-background棒の色
-barwidth線の太さ0.0~1.0
-borderwidth枠線の太さ
-foreground基本色
-backgroundstippleのビットマップの色
-labellegendに表示されるラベル
-labelrelieflegendのレリーフ
-relief棒のレリーフ
-stipple棒の背景模様。引数のパターンはblt::bitmapで作ったり。
-showvalues値の表示。
-valueanchor値の表示位置。n e w s c
-valuecolor値の色。
-valuefont値のフォント。
-valueformat値の表示用フォーマット

グラフのオプション

.g configure options
-barwidth棒の太さ.0.0~1.0(棒グラフ)
-barmodeinfront stacked overlap aligned (棒グラフ)
-invertxyxy軸を逆にする
-plotborderwidthプロット領域のボーダー幅
-plotpadxプロット領域のpadx
-plotpadyプロット領域のpady
-plotreliefプロット領域のレリーフ
-fontタイトルのフォント
-titleタイトルのラベル文字

目盛りのオプション

.g axis configure axisName options

みたいな。x y とx2 y2がデフォで存在し、それぞれグラフの4辺に対応している。 x2 y2はデフォルトで非表示になっている。自分で追加することもできる。 目盛りは基本的に数値しか使えないが、limitsformatを使って細工することで 文字を入れることもできる。

-descending逆にする
-hide隠す
-limitsfont目盛りの数値のフォント
-limitsformat目盛りのフォーマット
-rotate目盛りの文字の回転
-logscale対数にする。true|false
-looseグラフの開始値と終了値の左右(上下)に幅を持たせる
-max最大
-min最小
-majorticks大目盛りを打つ数値のリスト。
-minorticks小目盛りのリスト。0.0~1.0。グラフを拡大したときの描画がおかしい?
-showticks目盛りを表示する
-stepsize表示目盛りのステップ数。
-tickdividerこれも分割数?
-subdivisions小目盛りの分割数
-ticklength目盛りの長さ。マイナスにすると向きが逆になる。
-titleタイトル
-titlefontタイトルのフォント

棒グラフで横棒のグラフにする

.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

みたいな。
vectorはシーケンスを操作するための色々と便利なサブコマンドがある。 (めんどくさいので省略)。blt::vector v; v;すればコマンド一覧が見れる。

組み込み関数

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はよく使う。 こまかく挙動を制御したいときは自分で実装することもできる。


CategoryTclTk A Stub-enabled BLT2.4z for Windows


|New|Edit|Freeze|Diff|Backup|Attach|Copy|Rename|
Last-modified: 2005-12-21 (Wed) 00:00:00 (4716d)
HTML convert time: 0.028 sec.