ngraph-gtk · 2013 debian 2/43 level up debian » ngraph-gtk: wheezy · maintainer: koichi akabe ·...

43
2013 大統一 Debian 勉強会 1/43 ngraph-gtk で楽々グラフ作成 伊東宏之

Upload: phungdang

Post on 21-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

1/43

ngraph-gtk で楽々グラフ作成伊東宏之

Page 2: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

2/43

Level up Debian

» ngraph-gtk: wheezy からオフィシャルパッケージに· Maintainer: Koichi Akabe さん

· Co-maintainer: Ito Hiroyuki

» ngraph-gtk をデータ処理、グラフ作成に活用

» ngraph-gtk の開発で level up

Page 3: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

3/43

ngraph-gtk の概要

Page 4: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

4/43

Ngraph とは?

» 2 次元散布図を作成

» Satoshi ISHIZAKA さん作

» MS-DOS on PC-9801 環境では比較的メジャーなソフト

» 1996 年 Windows 版(シェアウェア → 2010 年フリーウェア)

» 1998 年 Linux 版 (2001 年フリーソフト (GPL))UNIX 系 OS で動作可能

Page 5: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

5/43

ngraph-gtk とは?

» Linux 版 Ngraph から派生

» ウィジェットライブラリをMotif から GTK+ に変更

» 個人的に使いやすいように機能追加・仕様変更

» 動作の高速化

» Windows でも動作

Page 6: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

6/43

ngraph-gtk

» 開発の動機· 環境設定が面倒 (フォント、印刷、日本語…)

» 開発のメリット· 統一された look & feel

· Pango による国際化テキスト対応

· Cairo による統一された画面、画像、印刷出力

· GTK+ の便利な機能を活用

· 使いやすいように機能追加

Page 7: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

7/43

ngraph-gtk で出来ること

Page 8: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

-2 2

20

40

8/43

できること - XYグラフ作成

» 散布図

» 棒グラフ

» エラーバー

» フィッティング

Double Gaussian Fit

0

peak-1: (-1.32, +32)peak-2: (+1.42, +6.14)

y = a1 e-a2(x-a3)

2

+ a4 e-a5(x-a6)

2

+a7

Page 9: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

-20 0 20

-20

0

20

9/43

できること - XYグラフ作成

» 矢印

» 矩形

» 多角形

X

Y

Page 10: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

2013

-06-

12

2013

-06-

17

2013

-06-

22

2013

-06-

27

100

101

10/43

できること - XYグラフ作成

» 日付軸

» 逆数軸・対数軸

» グリッド線

» 傾いたグラフ· 手動設定

» 斜交座標· 手動設定

Page 11: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

11/43

できないこと

» 円グラフ・帯グラフは描けません頑張れば出来なくもないけど…

· 数式変換で頑張る

· スクリプトで頑張る

Page 12: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

12/43

できること - お絵かき

» グラフのキャプション作成機能

» 頑張れば実験配置図程度なら描けます

frep

1GHzBPF

PZT

freqencycounter 1

89GHz GunnOscillater

BPF freqencycounter 2

Hydrogenmaser

BPF

Waveguide-type3dB coupler

fs pulseEr fiber laser

frep servoelectronics Synthesizer

Synthesizer

PLL

Page 13: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

13/43

できること - 各種自動処理

» Ngraph script

· sh と同じ文法でプログラム可能

· グラフもスクリプトとして保存される

· Xサーバーは不要

» 自動処理の例· グラフの自動作成

· キャプションの自動作成など (アドイン)ngraph-gtk-addins-base, graph-gtk-addins

Page 14: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

14/43

できること - 各種自動処理

» 外部プログラムの利用

» TeX 数式のインポート (pdfLaTeX)

· ngraph-gtk-addin-tex-equation

» PostScript ファイルのインポート· pstoedit を利用

· ngraph-gtk-addin-import-ps

» xfig 形式に変換してから独自の画像フォーマットに再変換

Page 15: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

15/43

できること - 各種自動処理

» 自動処理の例· その他プログラム次第このプレゼンは ngraph-gtk で作成・表示しています

· プレビューアにイベント待ち機能フルスクリーン表示機能を追加

· 簡単なコマンドを記述したファイルを読み込んで表示

· PDF への出力も可能

Page 16: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

16/43

簡単な使い方

Page 17: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

17/43

簡単な使い方

» スペース、コンマなどで区切られた x, y データを用意· 1行1データのasciiテキストファイル

» 「ngraph データファイル」で起動

ngraph test.dat

» 必要に応じて、軸ラベルやキャプションを追加

Page 18: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

18/43

簡単な使い方 - (多分) わかりにくい点

» 「点と線」のプロットは同じデータを点と線の各プロットに2回使います。

· 「ファイルリスト」で「Ins」キーを押すのが楽

» 「軸のラベル」や「グラフのタイトル」専用の機能はありません。

· テキストを好みの場所に配置します。

Page 19: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

19/43

簡単な使い方 - (多分) わかりにくい点

» グラフは設定やキャプションなどが保存されます。· データを削除・移動などすると描画できなくなります。

· データ込みで保存する機能もあります。→読み込み時にデータが展開されます。

» 詳しくは ngraph-gtk-doc パッケージでインストールされるマニュアルを参照してください。

Page 20: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

20/43

ngraph-gtk の改善点数式変換機能

Page 21: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

21/43

数式変換機能

» 生データを数式変換してプロット

» ユーザー定義関数によるフィッティング

» 数値パラメーターの設定

Page 22: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

22/43

数式変換機能

» ngraph-gtk では新しく書きなおし· 高速化

· 多機能化

· メンテナンス性向上

» 言語処理系の勉強も兼ねてスキャナ・パーサを自作

Page 23: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

23/43

数式変換機能

» 従来· 数式設定時:演算子・関数等を1バイトのIDに変換

数値リテラルを浮動小数点に変換

· 計算時:構文解析・計算

» 新しいコード· 数式設定時:構文木を構築

· 計算前:簡単な最適化

· 計算時:構文木を評価

Page 24: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

24/43

数式変換機能 - 高速化

» 10 000 000 行のデータを読み込んで数式変換設定の有・無による実行時間を比較

· X データ変換数式:X/MINX+Y/200

· Y データ変換数式:Y/MAXY*PI-200

· ngraph-gtk: 12.021 〜 13.762 秒Ngraph: 25.436 〜 26.545

Page 25: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

25/43

数式変換機能 - 高速化

» 最適化· 定数を数値に変換

· 数値のみの項は事前に計算

· 数値による割り算は掛け算に変換

· 1.0 による掛け算・割り算は無視

· 1+2+3+4+5+6+7+8+9+10+X/10=55+X*0.1

· X/10+1+2+3+4+5+6+7+8+9+10=(((((((((((X*0.1)+1)+2)+3)+4)+5)+6)+7)+8)+9)+10)

Page 26: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

26/43

数式変換機能 - 多機能化

» 変数への代入、配列、関数定義などの構文を追加

» 組み込み関数を多数追加

» 数式設定時に文法エラーを検出

Page 27: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

27/43

数式変換機能 - メンテナンス性向上

» 従来· 約 400 〜 500 行の 3 個の関数で構成

(引数は 17 〜 43 個)

» 新しいコード· スキャナ、パーサ、関数・定数定義などを明確に分離

· メタプログラミングを活用 (関数、定数、演算子定義)

· 定数、関数は簡単に追加可能(演算子の追加はパーサなどの変更が必要)

Page 28: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

28/43

数式変換機能 - 今後の改善

» 高速化· バイトコードまでコンパイル

· 最適化で SQRT(2) などを数値に変換→副作用のある関数との区別が必要

» 複数行の数式を設定可能にする (GUI)

· 履歴による補完も便利なので1行入力 (GtkEntry) と併用?

Page 29: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

29/43

ngraph-gtk の改善点その他

Page 30: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

30/43

その他の改善点

» オブジェクト、シェルコマンドなどの探索· 従来:線形探索

· ngraph-gtk:ハッシュ

» ファイル読込· 読み込み時の無駄な処理を見直し

» 10 000 000 行のデータを数式変換なしで読み込み· 従来:約 39.6 秒

· ngraph-gtk:約 16.6 秒

Page 31: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

31/43

その他の改善点

» 数式変換、テキスト入力などで履歴による補完が可能

» 図形描画機能の強化· 曲線に矢印をつける、曲線の塗りつぶしなど

» スクリプト用機能の強化· オブジェクトに各種機能追加

» etc.

Page 32: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

32/43

GTK+ のこと

Page 33: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

33/43

GTK+ の不具合 (1)

» GtkColorButton をクリックして表示されるダイアログで現在の色が選択されていないhttps://bugzilla.gnome.org/show_bug.cgi?id=676198

· version 3.6.0 で修正済み

» GtkColorChooserDialog の「+」で新規の色を作成する時に現在の色が反映されないhttps://bugzilla.gnome.org/show_bug.cgi?id=676199

· 不具合ではないとして取り下げ

Page 34: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

34/43

GTK+ の不具合 (2)

» GtkCellRendererSpin で値を編集した時に、不正な関数呼び出しが起こるhttps://bugzilla.gnome.org/show_bug.cgi?id=691592

· アクセシビリティのためのコールバックを登録するだけで削除しないため

· version 3.8.0 で修正済み

· GtkAdjustment を複数のスピンボタンで使いまわした時に、不要なコールバックが呼び出される不具合が未解決

Page 35: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

35/43

GTK+ の不具合 (3)

» fa_IR など右から左へ記述する言語でGtkTreeView のグリッド表示がおかしくなる

· version 3.10.0 で修正予定

» fa_IR など右から左へ記述する言語でGtkMessageDialog のメッセージ表示位置がおかしくなる

· 未報告

Page 36: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

36/43

GTK+ の不具合 (4)

» GtkComboBox で GtkCellRendererToggleの表示が変

· 未報告

Page 37: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

37/43

GTK+ の不具合 (5)

» GtkCellRendererSpin で値を編集するときに時に、スピンボタンが邪魔

· 未報告

Page 38: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

38/43

今後の課題

Page 39: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

39/43

今後の課題 (1)

» MVC の View と Controller をもっと分離したい· スクリプトをもっと便利にできそう

· 移植性の向上

» スクリプトが遅い、複雑な処理に向いていない· mruby 組み込み

· 言語処理系を自作

» 互換性や作業量を考えるとだいぶ先の話?

Page 40: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

40/43

今後の課題 (2)

» ドキュメントの充実· オブジェクトの仕様

· スクリプトのコマンド仕様

» マニュアル、PO ファイルの翻訳

Page 41: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

41/43

おわり

Page 42: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

42/43

発表資料

» 下記URLからダウンロードできます。· http://homepage3.nifty.com/slokar/ngraph/debian_2013_ito.tar.gz

· サンプルデータ、プレゼン用スクリプトなども含まれています

· ぜひ実際に使ってみてください

Page 43: ngraph-gtk · 2013 Debian 2/43 Level up Debian » ngraph-gtk: wheezy · Maintainer: Koichi Akabe · Co-maintainer: Ito Hiroyuki » ngraph-gtk !

2013 年 大統一 Debian 勉強会

43/43

自由なソフトに関わった全ての方々に感謝します