=begin
= Gfdnavi においてどうやって可視化機能を増やすか
#
# 履歴情報 (新しい更新履歴を上に追記していくこと)
#
# * 2008/03/08 (西澤) 編集
# * 2006/02/24 (西澤) 編集
# * 2006/12/05 (堀之内) 編集
# * 2006/11/11 (西澤) 編集
# * 2006/11/07 (堀之内) 作成
== システムに追加する
=== 変更すべきファイル
* yaml file
* db/draw_methods/hoge.yml
* Help file
=== yaml file
描画メソッド一つにつき、一つの yaml file を用意する。
==== 基本的な情報の設定
以下は折れ線図のための yaml file である。
db/draw_methods/line.yml
:name: line
:description: line plot
:ndims: 1
:nvars: 1
:vizshot_method: line
:attributes: []
yaml file には Hash データが入っており、
その Hash のキーは symbol である。
* ":name:" : 名前 (String)
* ":description:" : 説明 (String)
* ":ndims:" : 変数の中のいくつの次元を使って描画するか (Integer)
* ":nvars:" : いくつの変数を使って描画するか (Integer)
* ":vizshot_method:" : 対応する vizshot のメソッド名 (String)
* "attributes:" : 描画パラメータの情報 (Array)
==== 描画パラメータの設定
line では描画パラメータの設定は一つも無かった。
次に、描画パラメータを設定する場合について説明する。
以下はトーン&等値線図のための yaml file である(一部省略)。
db/draw_methods/tone.yml
:name: tone
:description: tone and contour plot
:ndims: 2
:nvars: 1
:vizshot_method: tone_cont
:setting_html: |
<%= check_box("analysis", "tone_tone") %>
<%= text_field("analysis", "tone_min", :size => 4, :maxlength => 12) %>
<%= text_field("analysis", "tone_levels", :size => 30, :maxlength => 200) %>
<%= check_box("analysis", "tone_color_bar") %>
:attributes:
- :name: tone
:default: true
:type: boolean
:parser: vizshot
- :name: min
:type: float
:optional: true
:parser: ggraph
- :name: levels
:type: array_float
:optional: true
:parser: ggraph
- :name: color_bar
:default: true
:type: boolean
:parser: vizshot
":attributes:" は Hash を要素とする Array である。
その Hash は symbol をキーにもつ
* ":attributes:" : 描画パラメータの情報 (Array)
* ":name:" : 名前 (String)
* ":default:" : デフォルト値 (type に依存)
* ":type:" : 値のタイプ (String: int, float, boolean, string, array_int, array_float)
* ":parser:" : vizshot, ggraph のどちらにオプションを与えるか (String: vizshot, ggraph)
* ":setting_html:" : 描画パラメータをブラウザから設定するためのRHTML (String)
RHTMLのなかではERBおよびRailsのヘルパーメソッドが利用できる。
改行を含む String を yaml file にかく場合は "|" から初めて、
空行で終わる。
==== オリジナルの描画法の設定
折れ線、コンターともにvizshotでサポートされている描画メソッドである。
では、次に独自の描画メソッドを追加する方法を見てみよう。
以下は散布図用の yaml file である。
db/draw_methods/scatter.yml
:name: scatter
:description: scatter plot
:ndims: 1
:nvars: 2
:vizshot_method: scatter
:attributes: []
:script: |
newfrm = opt.delete(:newfrm)
GGraph::scatter(gphys, gphys1, newfrm, opt)
:ggraph: |
gropn_1_if_not_yet
unless defined?(@@scater_options)
@@scater_options = Misc::KeywordOptAutoHelp.new(
['title', nil, 'Title of the figure'],
['annotate', true, 'if false, do not put texts on the right margin even when newframe==true'],
['index', 1, 'mark index'],
['type', 2, 'mark type'],
['size', 0.01, 'marks size']
)
end
opts = @@scater_options.interpret(options)
gphys = gphys.first1D.copy
gphys1 = gphys1.first1D.copy
len = gphys.length
.
.
snip
* ":script:" : vizshot 用のスクリプト (String)
* ":ggraph:" : ggraph 用のスクリプト (String) (optional)
=== Analysis Model
Analysis model 内では、
描画パラメータの追加は、Analysisクラスの属性を追加することで実現されている。
クラス属性の名前は "描画メソッド名+パラメータ名" である。
例えば、toneメソッドのmaxパラメータの場合、
Analysis#tone_max となる。
描画に関するパラメータやオプションをもとに、
Analysisモデルが Vizshot を生成し、
その vizshot を通じて GGraph や DCL に渡される。
=== ヘルプ
(()) を参照
== ユーザーオリジナルメソッドを登録する
=== 描画メソッド登録ページ
ユーザーオリジナルのメソッドを登録するためには、
まずユーザーログインする必要がある。
ログインした時の画面もしくは上のメニューから "User" をクリックした画面に "manage_draw_methods" リンクがある。
そこに移動すると、利用できる描画メソッドのリストおよび、
描画メソッド新規追加ページへのリンク(create_draw_method)がある。
さっそく新規追加ページに移動しよう。
ここで入力する値は、上の yaml ファイルに記述した内容とほとんど同じである。
* name : 名前
* description : 説明
* group : このメソッドの利用を許可するグループ (複数選択可)
* number of input variables : 変数の数
* number of dimensions : 次元の数
* vizshot method : vizshot のメソッド名
* script for vizshot : vizshotに対応するメソッドが無い場合のスクリプト
* script for ggraph : ggraphに対応するメソッドが無い場合のスクリプト
* number of attributes : 属性(オプション)の数
* attribute : 属性(描画パラメータ)
* name : 名前
* default : デフォルト値
* value type : 値のタイプ
* parser : vizshot or ggraph どちらに与えるオプションか
* Html for specific setting :
"create_default_html" ボタンを押すと、上で入力した値を元に、
html を作成し、下の text area に挿入してくれる。
これを元に必要な部分を編集すればよい。
もちろん最初からすべて自分で書いてもよい。
いつでも、"create_default_html" を押せば、デフォルトの html に戻る。
ERB および Railsのヘルパーメソッド が使用できる。
"preview" ボタンを押すと、
下にその html がレンダーされて表示される。
実際にそのhtmlがどのように表示されるかをチェックする。
* create :
"create" ボタンを押すと、描画メソッドが登録される
=end