ページが長いので「しおり」の仕組みを用意してみました。
「しおり用」と書かれた所をクリックしてからブックマークに入れると、
それはページの先頭ではなく、その箇所へのブックマークになります。
(03/03 2006)
- (12/30 2005)
(しおり用)
下 (「情報やメモ (12/29 2005)」) の
gdpm terminal を更新しました。
修正点は以下の通りです。
- _image() のサポート。
- term->name のバグの修正。
- Enhanced text mode の実装の試作 (まだ使えません)。
- ヘルプの修正。
Enhanced text は一つ問題があってうまく実装できていません。
そもそも、このドライバは、perl のコードを吐くだけで
実際に画像は生成しませんから、原理的にドライバは
現在の描画情報をリアルタイムは取得できない、
ということになりますが、
Enhanced text では、TrueType フォントサイズを
フォントの空打ちで取得していて、
それが他の描画ルーチンにも影響するので、
その部分の実装ができないでいます。
同じ理由で、フォントのチェックも PNG terminal よりは怠けていますし、
_set_font() での justification も少し省いています。
_make_palette() も実装していません (よって pm3d は使えません)。
- (12/29 2005)
(しおり用)
現在の gnuplot-4.X では、PNG/GIF/JPEG 出力は、
gd ライブラリで統一して出力されています。
その gd ライブラリの Perl への実装である
GD.pm というものがあります。
これを使うと Perl 上でプログラマブルに PNG/GIF/JPEG 画像が
作れるのですが、GD.pm はほぼ忠実に gd ライブラリの関数を
Perl のメソッドとして再現しています。
よって、gnuplot の gd.trm で使われている gd ライブラリ関数を、
それに対応する GD.pm のメソッドに置きかえて出力するようにすれば、
GD.pm 用の Perl コードを吐く gnuplot 出力 terminal が作れるのでは、
と考えていたのですが、
やっつけ仕事で試作品を作ってみました。
gnuplot-4.1 (CVS 版) 用のコードです。
ただし、まだ Enhanced text mode と GIF animation は実装していません。
オプションは PNG terminal とほぼ同様ですが、
作成する画像形式を指定する "outform <format>" が
追加されています (<format>" = png (default), gif, jpeg)。
一応 test では png 出力と同じものが出るようです。
PNG terminal に対する優位性は、以下のような点です。
- テキストファイル出力なので、その中身を修正できる。
- gd.trm の動作の様子を知ることにも使える
(ほぼ gd.trm の動作と同じことが行われます)。
なお、set output で指定するファイルは、出力される Perl ファイルで、
その Perl ファイル (例えば file.pl とします) が作成する画像は、
STDOUT (標準出力) に出力しますので、画像を作成するときは
% perl file.pl > file.png
のようにしてください。
また、gd ライブラリが日本語に対応していれば、
GD.pm でも日本語が出せて、このドライバでも日本語が使えますが、
perl 5.8.X では適切なエンコーディングを指定する必要があります
(内部処理は Unicode) ので、出力される perl コードの先頭の
use GD;
の下に
use encoding "euc-jp";
binmode STDERR, ":encoding(euc-jp)"
のようなものを追加してください
(今のところ、そのようなコメント行を吐くようにもしていますので、
そのコメントを外しても結構です)。
なお、GD.pm のマニュアルの日本語訳は以下にあります。
(cf. 「情報やメモ (12/30 2005)」)
- (12/03 2005; no.3)
(しおり用)
奥村@三重大 さんの
TeX Q&A 掲示板
で「帯グラフ」を書きたい (39574)、というものを見て、
gnuplot で書くには、と少し考えてみました。
CVS 版の gnuplot-4.1 ならば、histogram スタイルがありますので、
それを横にして見てもらえば帯グラフに見えなくもないかなと思いますが、
元記事の方は、帯と帯の間に破線を入れたい、
という意見でした。確かにこれもよく見ます。
しかし、現在の gnuplot-4.1 には残念ながらそのような機能はありません。
よって、その線は set arrow を使って書くことにすれば、
と思って以下のような awk スクリプトを書いてみました。
上記のサンプル画像は、以下のようなデータを食わせて作成したものです。
あ い う え お か
10 20 30 10 5 25
15 15 40 10 5 15
使用法等は、awk スクリプトの先頭のコメント部分を見てください。
ただし、あくまでサンプルスクリプトでしかありませんので、
自分用に利用する場合は、適宜修正して利用することをお勧めします。
(cf. 「情報やメモ (02/07 2015)」,
「情報やメモ (06/07 2024;
no.2)」)
- (12/03 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
plot のデータファイルとして
"< ./gp_test.sh" のようにシェルスクリプトを指定し、
その中で cat 等を使って別のデータを出力させたりすると、
「パイプが切断されました」と表示されますが、
問題ないですか、という質問がありました。
特に問題はないので気になるなら /dev/null に捨てたらどうでしょう、
という返答がありました。
とりあえずはそういうもののようですが、
私も詳しい理由はわかりません。
gnuplot 内部で設定しているハンドラ等の影響でしょうか。
(1093 の記事から始まるスレッド
「script の出力からのデータプロットについて」)
-
日付と時刻からなるデータを、
x 軸に日付、y 軸に時間を出力するには、という質問がきました。
gnuplot では時系列データの入力形式 (set timefmt) は
1 種類しか使用できず、
x 軸と y 軸用の timefmt を別に指定することはできません。
Unix であれば、sed や awk を使って入力データを少し加工してから
入力することにより、なんとかすることができます。
また、CVS 版 gnuplot-4.1 では timecolumn() という関数を使って
日時データを gnuplot の内部表現に変換できるので、
それを利用するともっとスマートに数値的に利用できます。
(1096 の記事から始まるスレッド
「日付、時間を取り扱うときに x, y 軸に違う書式を使うには」)
-
gnuplot-4.0.0 の rpm はどこにあるか、
という質問がありましたが、
http://rpmfind.net/
で gnuplot を検索するとたくさん出てくるそうです。
(1103 の記事から始まるスレッド
「gnuplot4.0.0 の rpm ファイルについて」)
-
実験データをプロットしてそれらを近似曲線でつなげるには、
という質問がありましたが、
plot smooth を使えばこれは可能です。
しかし、そのようなやり方は理屈の上ではおかしくて、
むしろ、意味のある非線形回帰 (fit) を行うべき、
というもっともなご意見もありました。
(1105 の記事から始まるスレッド
「近似曲線について」)
-
comp.graphics.apps.gnuplot に、
gd ライブラリに由来するバグの報告がありました。
rmargin を 0 にして ps を適当な値にすると、
コアダンプするようです。
(1108 の記事
「png terminal (libgd) のバグ」)
-
(n) 行目と (n+1) 行目のデータの差を取ってそれを描画させるには、
という質問がありました。
gnuplot 単体ではそれはできませんが、
Unix ならば awk を使って差を計算させて、
それを gnuplot に食わせることができます。
(1113 の記事から始まるスレッド
「行と行の差」)
-
plot で以下のように標準入力からデータを入力させる場合、
plot '-' with lines, '-' with lines
通常のファイルからの入力のように、
1 回分だけ入力すればいいわけではなく、
2 回分同じデータを入力する必要があります。
よって、通常 index や every は使う必要はなく、
必要なデータのみ入力すればいいはずです。
詳しくは help special-filenames を参照してください。
(1119 の記事から始まるスレッド
「標準入力からのデータをブロック化プロット出来ない」)
- (12/03 2005)
(しおり用)
前回の報告 (10/31 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- 単一引用符内に単一引用符を書けるようになった ('' と重ねて書く)。
- binary filetype が avs イメージをサポート。
- metapost terminal の改良 (version 4.1 の機能をサポートし、
文字列の回転や長方形や多角形内部の塗り潰し機能等が改良)。
- x11 terminal のカラーマップに関する改善。
- tgif terminal のヘッダ出力に gnuplot version を含めるようになった。
- set {xyz}tics で文字列変数、文字列関数が使えるようになった。
- set style data rgbimage のバグの修正。
- set arrow が他の set コマンド同様、
オプションを順次追加指定できるようになった。
- set view map では "empty z range" のメッセージが
出ないようになった。
- 文字列の処理中の改善。
- 単に "set datafile binary" だけでは
エラーメッセージが出るようになった。
- 'set view map ; plot x' のときにマウスでズームすると
y 軸が反転してしまうバグの修正。
- その他、いくつかのバグの修正。
(cf. 「情報やメモ (02/19 2006)」)
- (10/31 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
multiplot を使って 2 つのグラフを横に並べるときに、
x の範囲が違うとそれらのグラフの x 軸の一目盛の大きさが変ってしまう、
という報告がありました。
確かに x 軸の一目盛の大きさは、
x の範囲 (xrange) と描画グラフの横幅から計算されるので、
例えば一方の範囲が 60, 他方が 150 のような場合に
同じ大きさのグラフを書いたのでは一目盛の大きさは揃いません。
よって、一目盛の大きさを合わせたい場合は、
それらのグラフの横幅を、それぞれの x の範囲の比に
揃える必要があります。例えば上の場合は 60:150 の比に
しないといけません。
それは set size で調整できます。
それに合わせて set origin (や margin) なども
調整する必要があるかもしれません。
それらを手計算するのは面倒ですから、
変数を利用してそれらの計算を gnuplot にさせると楽でしょう。
そのような解が報告されていました。
(1031 の記事から始まるスレッド
「グラフ2枚を横に並べるときの微調整について。。。」)
-
2 種類のコンパイラで作成した gnuplot バイナリを共存させようと
configure 時に --program-suffix=_icc を使ったのだが、
それが呼びだす gnuplot_x11 が別な名前になってくれない、
という報告がありました。
それに対し、以下のいくつかの解が紹介されました。
- term/x11.trm 内の gnuplot_x11 の名前の部分を直接書きかえる
- configure 時に --program-suffix=_icc を使わずに、
make 時、インストール時に make 'EXEEXT=_icc' のようにする
- gnuplot_x11 の名前を変えるのではなく置き場所を変えるために
- make 'pkglibexecdir=hoge' のようにする
(hoge/gnuplot_x11)
- configure 時に --prefix=hoge を使う
(hoge/libexec/gnuplot/4.0/gnuplot_x11)
- configure 時に --libexecdir=hoge を使う
(hoge/gnuplot/4.0/gnuplot_x11)
- make 時に make 'X11_DRIVER_DIR=hoge' を使う
(hoge/gnuplot_x11)
ただし、この場合 gnuplot_x11 の install は手動でやる
必要があるものもある
- あくまで configure 時に --program-suffix=_icc で
なんとかしたいなら、
その設定は program_transform_name にしか使われていなくて、
かつそれは sed コマンドで使われるように変換されているので、
term.c がコンパイルされるところで
-DGNUPLOT_X11='gnuplot_x11_icc' というフラグが付くように
Makefile.in を修正する手がある
- それなら、configure の --program-suffix=_icc
の後で、config.h に
#define GNUPLOT_X11 "gnuplot_x11_icc"
と書いて make する、という手がある
configure の --program-suffix オプションは、
元々 configure 汎用のオプションで、
上の program_transform_name を見るとわかるのですが
あまり個々のアプリケーションが使えるような仕組みにはなってはおらず、
多分 MS-Windows などの OS の場合に .exe をつけるため、
といったようなオプションなんだろうと思います。
だから gnuplot のように、
別に起動するソフト名をハードコーディングするようなソフトの場合に
その仕組みを利用しようとすると、どうしても無理が出ます。
そういう需要が高いなら、それ専用の configure オプションを追加
する意味もあるかもしれませんが、そうは思えません。
個人的には、手動で (あるいはそれをスクリプト化して)
なんらかの作業を行うのが自然かと思います。
実際私も、テストのために CVS 版の gnuplot は何種類か作って
使い分けていますが、
pkglibexecdir を使って手動インストールする方法を取っています。
実際にはそれらをスクリプト化してあるので、
そうたいした手間ではありません。
(1036 の記事から始まるスレッド
「gnuplot cvs の --program-suffix 付の ./configure について」)
-
グラフを PowerPoint に貼りつける場合、
どの出力形式を利用するのがいいのでしょうか、という質問がありました。
これに対して以下のような回答がありました。
- Window terminal からクリップボード経由ではりつける
- (それだと画質がいまいちなため) EMF terminal 出力を使う
- (それだと enhanced text が使えないので) postscript terminal の
EPS を使うか、
gnuplot 上では文字はあまり書かずに PowerPoint の方で文字を書く
- CGM terminal を使う (MS Office のインポート用のフィルタを
手動で追加する必要がある)
- EPS はドロー形式だけど、MS-Windows ではビットマップを含む
EPSI であることが多いのであまりメリットはなく、
それならいっそ PNG 等のビットマップを最初から使う方が楽
- EMF terminal 出力はバージョンによっては
PowerPoint には直接取りこめない、という問題がある
- gnuplot 4.0 の EMF terminal は日本語が表示できない
私は普段 MS-Windows は使っていないし、
PowerPoint も MS-Office も持っていないので、
内容はよくわかりません。
MS-Windows 版の gnuplot については、松岡さんがご自身の
WWW ページ でもまとめておられると思いますので、
そちらも参照してみてください。
(1054 の記事から始まるスレッド
「グラフを PowerPoint に貼り付けたい」)
-
2 次元グラフの impulses の土台を、y=0 でなくて別な高さにしたい、
という話がありました。
これに対して、以下のような回答がよせられました。
- f(x)-offset を描画して、y 軸の目盛をその分手動でずらして設定する
- y 軸と y2 軸の範囲をずらして、y2 軸に f(x)-offset を描画して、
軸の目盛は y 軸のみ表示させる
2 次元描画だと後者の方がスマートだと思いますが、
3 次元描画の場合は z2 軸はないので前者のやり方しかないでしょうね。
3 次元描画でも z2 軸があると便利な事例が多ければ、
開発チームに頼んでみる、という手もあるかもしれません。
(1058 の記事から始まるスレッド
「X 軸の定義 (Y=0) を変えたい」)
-
CVS 版 gnuplot の "help x11 other_resources" に、
「現在の描画ウィンドウの内容は X11 クリップボードに送られる」
という記述があったが、という質問がありましたが、
これは質問者が想像したような、
MS-Windows 同様のマウスのドラッグによる画像の貼り付けが
X11 でも行える、ということを意味しているのではなく、
単にマウス位置情報 (テキスト) がクリップボードに送られる、
というだけです。
そこから、他の話題へも広がり、
- xlib terminal 出力のベクトルデータは、
他の X アプリケーションでも扱えるか
- いや、それは gnuplot_x11 専用である
- X11 のクリップボードはそもそもテキストしか扱えないし、
X11 上でドラッグしても画像領域指定なんてできない
- import なら、MS-Windows のようにドラッグで
画像領域を指定して切りだすことができる
- 最近の Tgif も import メニューの Screen Capture の機能で
同様のことが行えて、それを直接 Tgif に取り込むことができる
等の意見もよせられました。
import や Tgif の機能については私もよくわかっていませんでしたので
勉強になりました。
(1071 の記事から始まるスレッド
「help x11 other_resources」)
- (10/31 2005)
(しおり用)
前回の報告 (09/23 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- gnuplot_x11 のキーリピート部分の改善
- EMF terminal の軸が点線に (他の terminal と整合)
- pm terminal の RGB 色サポートの改善
- LOCALE (LC_NUMERIC) に関する改善
- ticslabels 指定が x2,y2,z 軸も可能に
- pbm terminal に size オプションが新設
- pm terminal の image サポート
- MS-Windows の bgd.dll (プリコンパイル版 gdlib) のサポート
- lower/raise コマンド (対話型 terminal の描画ウィンドウの上げ下げ)
の新設
- matrix データ処理に関する改善
- set style arrow (<index>) default,
set style line (<index>) default
でデフォルトの値に設定できるようになり、
また指定したオプションのみを指定したスタイルに
何度も追加できるようになった
- set ticslevel 以外に set xyplane で xy 平面の位置を
(z の範囲を考えずに) 指定できるようになった
- set zzeroaxis の新設
- x11 terminal の icon のタイトル名の変更と
負のウィンドウ番号も使えるようになった
- その他、多くのバグの修正。
追加/改良された機能のいくつかは、新しいマニュアルに書かれていて、
例などもあげられていますので、詳しくは以下をご覧ください。
(cf. 「情報やメモ (12/03 2005)」)
- (10/07 2005)
(しおり用)
「情報やメモ (09/23 2005; no.2)」
に書いた、GIF/PNG terminal で Windows terminal に色を合わせる件ですが、
とりあえずは、そこに書いたように、
set term gif size 640,480 \
xffffff x000000 x404040 \
xff0000 x00ff00 x0000ff xff00ff x000080 \
x800000 x008080 x000000 x808080 x008040 \
x808000 x800080 xc0c0c0 x00ffff xffff00
とか書けばとりあえず Windows terminal と同じ色になるのですが、
しかし、相変わらず最大色が 256 色なので、
この 15 色を越えてしまうと Windows terminal とは違い、
PNG であらかじめ定義された色が使われてしまうことになります
(Windows terminal なら 1 番目の色に戻ります)。
これを、指定した色だけを使用して、
最後まで使われるとまた最初の色に戻すようにする
(最大色を 256 にせず指定した色数だけにする)
gd.trm へのパッチを作りました。
現在の (09/24 2005 頃の) CVS 版用のものですが、これを使うと、
PNG/GIF terminal に colorloop オプションが追加され、それにより
set term gif colorloop size 640,480 \
xffffff x000000 x404040 \
xff0000 x00ff00 x0000ff xff00ff x000080 \
x800000 x008080 x000000 x808080 x008040 \
x808000 x800080 xc0c0c0 x00ffff xffff00
# red, green, blue, magenta, dark blue,
# dark red, dark cyan, black, grey, very dark cyan,
# dark yellow, dark magenta, light grey, cyan, yellow
と書けば 16 番目の色は 1 番に戻るようになります。
ちなみに、X11 terminal と同じ色にするには
set term gif colorloop size 640,480 \
xffffff x000000 x404040 \
xff0000 x00ff00 x0000ff xff00ff x00ffff xa0522d xffa500 xff7f50
# red, green, blue, magenta, cyan, sienna, orange, coral
とすればできます。
- (09/24 2005)
(しおり用)
新しい CVS 版 (09/23 2005, 09/24 2005) をコンパイルしてみたのですが、
うちの環境 (Ultra1 + Solaris 9) では、
どうも x11 term の ylabel, y2label がうまく出ません。
リソースで
gnuplot*fastrotate: off
とすると直るのでこの辺の問題だと思います。
もし上のような不具合が起こる人は試してみてください。
なお、もちろんこれは x11 terminal だけの現象で、
postscript terminal などでは問題はありません。
- (09/23 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
table データを音声化するソフト tbl2snd の紹介 (967 の記事)
-
3 次元空間内の曲線を平滑化して描画するには、
という質問がありました。
確かに 3 次元の曲線には smooth オプションがありません。
とりあえずは、
- 各座標毎に平滑化する
- それを table 出力する
- それを paste (Unix のツール) で一つのファイルにまとめて利用する
というごまかしの手があります。
(968 の記事から始まるスレッド
「空間上の軌跡(splot の smooth)」)
-
3 次元描画内の任意の位置に点を描くには、
gnuplot 4 では set label を使うと楽にできます。
(969 の記事から始まるスレッド
「床にプロット」)
-
アニメーションに関する質問が出て、それに対して、
- gnuplot 4.1 なら GIF animation 化できる
- animated GIF から AVI への変換ソフトがあるよう
- ImageMagick の convert で animated GIF から MPEG に変換できる
- Linux, FreeBSD 環境で ffmpeg を使って AVI や Flash (swf) が作れる
- ffmpeg は MS-Windows でも使える
- Unix 上なら PPM 出力 (term pbm color) を経由すれば
mpeg2encode で MPEG も作れる
といった回答がだされました。
(977 の記事から始まるスレッド
「三次元アニメーション」)
-
3 次元描画内の任意の位置に線分を描くには、
set arrow (nohead) を使うと楽にできます。
(981 の記事から始まるスレッド
「3次元座標値プロットにおける基準線」)
-
「情報やメモ (09/03 2005; no.2)」
で書いた、946 の記事
(「splot で頭が切れる」)
から始まる set view の第 4 オプションの scale_z > 1 の問題ですが、
comp.graphics.apps.gnuplot で聞いてみたら、
それはバグではなくて、指定パラメータの数値のせいで、
描画領域を越えているからクリッピングされている、
しかし境界線はクリッピングされない、
ということでそうなっているそうです
(by Hans-Bernhard Broeker)。
1003 番の記事にサマリを載せましたが、
少し実験しながら確かめてみると、以下のようになっているようです。
- set size の xscale, yscale の値は、グラフが切れる、
切れないには影響なし
(3D グラフから 2D 射影を作った後で、
その 2D ボックスのスケール変換を行なうから)
- set view の scale (第 3 引数) や scale_z は、
グラフが切れる、切れないに影響する
(3D グラフから 2D ボックス内への 2D 射影を作るときに
これが使われるから)
- set view で 3D 座標 (x,y,z) から 2D 座標 (x_1,y_1) を作るとき
の座標変換は、平行移動を除けば以下のような感じだろう:
x_1 = scale*{x*cos(rot_z)+y*sin(rot_z)}
y_1 = scale*{cos(rot_x)*(-x*sin(rot_z)+y*cos(rot_z))
+z*scale_z*sin(rot_x)}
(scale, rot_x 等は、set view [rot_x],[rot_z],[scale],[scale_z])
- その後で、set size によって (x_1,y_1) は (x_2,y_2) に変換される:
x_2 = xscale*x_1, y_2 = yscale*y_2
(xscale,yscale は set size [xscale],[yscale])
よって、グラフがクリッピングされてしまわないように
z 軸方向のみ上に拡大するには、
- scale_z = 1 として、xscale は変えずに yscale と rot_x を変える
(xy 平面の状態を変えないようにするには
yscale*cos(rot_x) が変化しないように変える必要がある)
- クリッピングされない程度に set view の scale を小さくして、
作成されるグラフの大きさを set size の方で調整する
(set origin の調整も必要)
という手が考えられます。
しかし個人的には、グラフがクリッピングされるのに、
境界線 (縦軸) がクリッピングされないのは納得できません。
(972 の記事から始まるスレッド
「re(2):splot で頭が切れる」)
-
CVS 版 gnuplot-4.1 の MS-Windows 版で、
windows.ini の保存されるフォルダが
ユーザの application data フォルダに変更されたそうです。
そういえば、前回の CVS 版の報告
(cf. 「情報やメモ (09/03 2005)」)
にそれを書きもらしました。
それと関連して、ネットワークドメインユーザとしてログインした場合
うまく起動できない (MS-Windows 2000, XP) という質問が出されました。
MS-Windows 版の問題である可能性があるそうです。
(997 の記事から始まるスレッド
「wgnuplot.iniの保存フォルダーの変更」)
-
Tcl/Tk でパイプ経由で gnuplot を実行するスクリプトを
書いたが、splot のマウス機能が使えない、という質問が出されました。
gnuplot 4.0 ではだめなようですが、
gnuplot 4.1 (CVS 版) ならいけるようです。
(998 の記事から始まるスレッド
「パイプでオープンした3次元表示でのマウスぐりぐり」)
-
wgnuplot で GIF terminal と Windows terminal の linetype の色が
違うが、という質問が出ました。
これに対して以下のような情報がよせられました。
- GIF/PNG terminal の色を見るには GIF/PNG terminal で test をすべき
- 4.1 なら色を名前で指定できる
- GIF/PNG terminal なら terminal オプションで色を指定できる
- Windows terminal と色を合わせたいなら、
Windows terminal ではデフォルトでは以下のように
15 色が定義されている
RGB(255,0,0), /* red */
RGB(0,255,0), /* green */
RGB(0,0,255), /* blue */
RGB(255,0,255), /* magenta */
RGB(0,0,128), /* dark blue */
RGB(128,0,0), /* dark red */
RGB(0,128,128), /* dark cyan */
RGB(0,0,0), /* black */
RGB(128,128,128), /* grey */
RGB(0,128,64), /* very dark cyan */
RGB(128,128,0), /* dark yellow */
RGB(128,0,128), /* dark magenta */
RGB(192,192,192), /* light grey */
RGB(0,255,255), /* cyan */
RGB(255,255,0), /* yellow */
(1008 の記事から始まるスレッド
「wgnuplot で gif ファイルを出力したい」)
-
CVS 版の wgnuplot がうまく動かない、という報告がありましたが、
そういうことはたまにあるそうです。
(1024 の記事から始まるスレッド
「wgnuplot cvs 版がうまく動きません。」)
今回は 3 次元空間曲線に関する質問が固まって出ていました。
そういう要求も割りとあるのですね。
plot と同様の 3 次元空間曲線の描画機能が実装されると
確かに多少うれしいかもしれません。
この
gnuplot Q&A 掲示板 も、ついに 1000 番を越えました
(キリ番
は松田さんでした (^^))。
今後のますますのご発展をお祈りいたします。
(cf. 「情報やメモ (10/07 2005)」)
- (09/23 2005)
(しおり用)
前回の報告 (09/03 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- pm3d でデータ描画時の各四辺形内の色も細かく色付けできるようになった
(set pm3d interpolate)。
- y,y2 軸のラベルを明示的に回転できるようになった
(set yrabel rotate)。
- PostScript terminal で埋め込みフォント表をクリアするオプション
nofontfiles が追加された。
- クリッピングルーチンの改善。
- 自動生成される軸の目盛りの見出しと同時に、
手動でも見出しをつけられるようになった (set xtics add)。
- SVG terminal で、set encoding が使われているときにその情報を
XML ヘッダに書き出すようになった。
- set label で enhanced text mode がデフォルトになった
(noenhanced で無効化可能)。
(cf. 「情報やメモ (10/31 2005)」)
- (09/03 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
球面上の関数を、その面上に等高線や色調を使って表現する方法の
議論がありました。
pm3d による曲面の色付けは、デフォルトでは曲面の高さが用いられますが、
追加の列データを使って、曲面の高さとは関係なく指定できます。
それによって簡単に曲面上の関数の値の色調表示ができます。
等高線の方はちょっと面倒ですが、例によって一度 table 出力させておいて
それをその曲面上の曲線になるように持ち上げることで一応可能です。
(873 の記事から始まるスレッド
「球面上の関数の等高線、色調表示」)
-
wgnuplot (4.0) で JPEG 出力をするには、という質問がでましたが、
確かにオリジナルの wgnuplot 4.0 では JPEG 出力が
有効になっていないようです。
これは角藤さんがコンパイルしておられるものを使えば解決します。
松岡さんによれば、DJGPP 版でも可能なようです。
(895 の記事から始まるスレッド
「windows での jpeg ファイルの出力」)
-
gnuplot のグラフを EPS で出力してそれを PDF にすると
グラフの線が細くなることがあるようです
(prosper で使うと見にくいとか)。
どのようなソフトを使っているのか知りませんが、
EPS のレベルで太くしてみるとか、
または pdf terminal で直接太いグラフを書かせてみるといった
案があります。
(900 の記事から始まるスレッド
「eps file を pdf に変換した際のグラフの線について」)
-
gnuplot で、fortran で生成したバイナリデータを直接グラフに
できないか、という質問がありました。
gnuplot 4.0 ではバイナリデータの扱いは多少制限があります
(splot の matrix 形式のみ) が、
CVS 版 gnuplot ではかなりバイナリデータに関する拡張が
行なわれましたので、
バイナリデータを使うなら CVS 版を使うのがいいでしょう。
(902 の記事から始まるスレッド
「fortran バイナリファイルの読み込み」)
-
gnuplot で、x 座標と y 座標のデータを、
ずれた行から取得することは可能か、という質問がありました。
例えば n 行目 (の 1 列目の) x 座標に対する y 座標を
(n+1) 行目 (の 2 列目) から取得する、
といったことが可能か、という意味だと思いますが、
それは gnuplot では難しいでしょう。
少なくともそのような仕組みはありません。
よって、そのようなことをする場合は、
awk などで前処理をする、というのが普通の方法だと思います。
(905 の記事から始まるスレッド
「グラフを書く際の座標のプロットについて」)
-
895 の記事で、wgnuplot 4.0 での JPEG 出力に関する話がありましたが、
Linux (Fedora Core 3) のパッケージでも使えない、という話がありました。
そうであればソースからコンパイルしなければ使えませんが、
デフォルトで OFF にしてあるんでしょうか。
JPEG 対応の GD ライブラリがあれば、普通にコンパイルすれば
PNG と変わらずに使えるようになるはずですから、
GD ライブラリが JPEG 対応になってないんでしょうか。
しかし、JPEG terminal に急に人気が出だしたのは何なんでしょうか。
個人的にはそっちの方に興味があります。
(914 の記事から始まるスレッド)
「JPEG 出力について」)
-
MS-Windows (多分 MS-Windows NT) 環境で、
perl による CGI から gnuplot の PNG 出力をしたいのだけど、
その場合日本語表示するには、という話が出ました。
この場合、pgnuplot 経由で日本語を出すわけですが、
途中長いスレッドになってしまいましたが、結局、
- 一般には CVS 版の角藤版では可能だけど、
最近 wgnuplot に shell32.dll のバージョンをチェックするコードが
入った (コンパイル時に無効にもできるが) ため、
利用している MS-Windows では使えない
(cf. 「情報やメモ (09/03 2005)」)
- 少し前の CVS 版の角藤版では、pgnuplot が日本語を通してくれない
(cf. 「情報やメモ (01/30 2005)」)
- 結局、少し前の CVS 版の角藤版の wgnuplot と、
最新のCVS 版の角藤版の pgnuplot を使って解決
となったそうです。
(922 の記事から始まるスレッド
「pgnuplot (角藤さん版) での日本語表示について」)
-
gnuplot は、set yrange をしないと
グラフの値によって自動的に yrange を設定しますが、
どのようなデータに対しても y 方向のグリッドを
yrange の 4 等分としたい、という質問がありました。
ようするに、autoscale による yrange を取得して (ymix,ymax)、
dy = (ymax-ymin)/4.0
set autoscale yfix
set yrange [ymin:ymax]
set ytics y1,dy,y2
set grid
のようにしてしまえばいいわけですが、問題は、
その ymin,ymax の取得です。
gnuplot にはそのようなものは用意されていないので、
range の writeback と restore 機能を使って、
- 一度ダミー terminal (unknown terminal) にそのグラフを書く
- yrange を restore で取得する
- それを save で外部ファイルに書きだす
- それを `` や command(), load などで取得する
というやり方があります。
(931 の記事から始まるスレッド
「ラベルの間隔?について」)
-
set view の 第 4 オプションには scale_z が用意されていますが、
それを 1 より大きい値にしていした場合、グラフの上の部分が切れてしまう、
という症状が報告されました。
set size と set view の rot_x 指定の組み合わせ
(scale_z は使用しない) で解消できるのですが、
何となく scale_z を使用した場合の表示がおかしい
(グラフは切れるし、z 軸のラベルもその辺りで出なくなるのだけど、
z 軸自体は切れない) ので、もしかしたらバグではないかとも
疑っています。
(946 の記事から始まるスレッド
「splotで頭が切れる」)
-
wgnuplot, pgnuplot で "形" という文字が出せない、
という話がでましたが、これは Shift_JIS の "形" の
2 バイト目が '`' (バッククォート) だからです。
" (ダブルクォート) の代わりに ' (シングルクォート) で
囲めば解決します。
(952 の記事から始まるスレッド
「wgnuplot、pgnuplotでの日本語 "形" について」)
最近、この掲示板の質問の回答に「終」がうまくついてない質問が
多いような気がします。
つまり、その回答でうまくいったのかとか、
それとも回答自体がまるでとんちんかんなことを言っていたのか、
といったことを
最後に質問者が結論をつけてくれない
(最初の質問にしか登場しない) ので、
そういうスレッドは
何やら中途半端に終わってしまっているような気がします。
しかし、単に「解決しました」「ありがとうございました」だけの
記事にあまり情報がないのも確かですから、最小限の情報を蓄積する、
という意味で見れば、それも正しい姿勢なのかもしれませんね。
(cf. 「情報やメモ (09/23 2005; no.2)」)
- (09/03 2005)
(しおり用)
前回の報告 (07/22 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- "set cntrparam" の incremental が、
z 軸が対数軸のときは積因子 (等比数列の公比) に。
- "rgbcolor variable" の追加
(splot で追加の列データで色指定が可能になる)。
- gnuplot の history の改良。
- pm3d が標準で有効になった。
- "set tics" が、全ての軸の挙動を変更するコマンドに変更。
それに伴い "set ticscale" も "set tics scale"
に移行。
- 各軸の目盛り (xtics 等) の刻みに対するオプションの追加
(刻みのサイズ、内外等)。
- demo/html/ が追加 (HTML demo の作成)。
- wgnuplot に shell32.dll のバージョンをチェックするコードが追加。
- "set key" の大幅な改良。
- "set multiplot" の title オプションの追加。
- OS/2 の pm terminal の enhanced text 部分の改良。
- "set timestamp" に明示的な font,offset キーワードが
追加された。
- "exit gnuplot" により、
階層的な load の下から gnuplot を終了することが可能になった。
- Fortran の D 型、Q 型データを認識する set datafile fortran の
実装。
- terminal ドライバに layer の仕組みが追加された。
上記のうち、"set multiplot" の title オプションは
まだドキュメントにはないようです (忘れてるのかな ?)。
また、"set key" はだいぶ変わったようで、
ドキュメントも図入りの解説になっています。
(cf. 「情報やメモ (09/03 2005; no.2)」,
「情報やメモ (09/23 2005)」,
「情報やメモ (09/23 2005; no.2)」)
- (07/22 2005)
(しおり用)
前回の報告 (07/03 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- strstrt(), "string"[beg:end] の文字列の index が、
0 からでなく、1 からになった。
- system("command") の追加。
- histogram style の場合に using 用の関数として key() が追加。
- データファイルに有効なデータ行がなかった場合に、
warning を出して処理を続行するようになった (3.7.2 の頃の仕様に戻った)。
- memory leak に関する部分の改良。
- DJGPP で GRX ライブラリがなくてもコンパイルできるようになった。
- plot や splot で関数と文字列変数 (定数) を指定した場合の処理の改善。
最初のものは、例えば strstrt("abcde","bc") = 1
だったのが strstrt("abcde","bc") = 2 に、
"ABCDEF"[2:3]="CD" だったのが、
"ABCDEF"[2:3]="BC" になった、ということで、
C 風の文字列処理から Fortran 風の文字列処理になった、
ということになります (と ChangeLog には書かれています)。
やはり、gnuplot の利用者は C よりも Fortran 好みなんでしょうか。
2 番目のものは、従来の ! によるシェルコマンドの実行との違いは、
- command の標準出力への出力を取りこめる (system() の返り値として)
- gnuplot の変数を command 名や command のオプションとして渡せる
といった点でしょうか。例えば、マニュアルには、
それを合わせたような
f(x) = real(system(sprintf("somecommand %f", x)))
という、なにやらすごい (?) 例が載っています。
3 番目のものは、set style histogram clumnstacked 用のもので、
"using 2:key(1)" のように使う (1 列目を key タイトルに使用)
もののようです。
(cf. 「情報やメモ (09/03 2005)」)
- (07/03 2005)
(しおり用)
前回の報告 (06/19 2005; no.3)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- set decimalsign に locale オプションの追加。
- set (x|y|z)label, title, label のフォント名として
文字列変数を指定できるようになった。
- strstrt("string","key")
(="key" の現れる先頭位置) の追加。
- word("string",n) (=n 番目の単語) の追加。
- words("string") (=単語数) の追加。
- emf terminal のオプションの順序依存性の改良。
- 文字列変数引数処理に関する改良。
最後のものは、例えば
plot func(x), FILENAME
という描画で、FILENAME を文字列変数とした場合にうまくいかない、
という問題の報告 (by Taro Sato さん) に対する対処が中心だと思います。
新たに追加された文字列処理関数 strstrt(), word(), words() は、
awk で言うと index(), $n, NF に相当するようなものです。
これで、もし gnuplot により強力な制御構造 (条件分岐やループ) が入ると、
外部で前処理として使う awk がいらなくなるかもしれませんね。
(cf. 「情報やメモ (07/22 2005)」)
- (06/29 2005)
(しおり用)
「情報やメモ (06/26 2005)」 で紹介した、
set label でもフォント名に文字列変数を使えるようにするパッチですが、
これも現在の CVS 版に採用されたようです。
- (06/26 2005)
(しおり用)
「情報やメモ (06/19 2005)」 で紹介した、
title や {x,y,z}label のフォント名に
文字列変数を使えるようにするパッチですが、
それを改良したスマートなもの (ちゃんとしたもの) が
CVS 版に取り入れられました。
ただし、set label では
まだフォント名に文字列変数が使えるようになっていません。
これを使えるようにするパッチを以下に置きます。
現在の CVS 版用のものですが、
これもそのうち CVS 版に採用されるかもしれません。
なお、これは gnuplot の開発者の E.Merritt さんに教えて頂いたものです
(Thanks to E.Merritt).
(cf. 「情報やメモ (06/29 2005)」)
- (06/19 2005; no.3)
(しおり用)
前回の報告 (05/02 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- 部分文字列 ("strings"[beg:end],
substr("strings",beg,end) を取得できるようになった
- strlen("strings") (=文字列の長さ) の追加。
- timecolumn(x) の (ドキュメントの) 追加。
- set arrow と set style arrow のオプション (とドキュメント) が
統一化。
- set style histgrams に errorbars オプションが追加。
またこれにともなって set bars に fullwidth オプションが追加。
- set style line に {linecolor | lc} オプションが追加。
- postscript 系 terminal, pslatex terminal で
実数のフォントサイズが指定できるようになった。
- history に関する gnuplot readline の改良 (GNU readline 風)。
- locale に関する修正 (LC_NUMERIC を "C" に)。
- ドキュメント生成部分の修正。
例えば HTML ファイルは従来は texi 経由で makeinfo で作っていたが、
latex2html を使うようになったり、
gnuplot.doc に新たに '=' で始まる行が追加された
(doc2tex, doc2texi の index 用)。
- term/pm.trm (OS2 用) の改良。
(cf. 「情報やメモ (07/03 2005)」)
- (06/19 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
multiplot でグラフを重ねる話から発展して、
Tgif で グラフを透過的に重ねる話が出ました。
透明化された PNG 画像を convert で XPM 形式に変換すると
透明化された XPM ができ、
それを Tgif で import すると Tgif 上で透過的に重ねられるようです。
さらに、Tgif のリソースを設定して PNG 画像の import で済ませるには、
convert (ImageMagick) でなくて netpbm でやるには、
といった話がでました。
なお、元記事の方は splot の pm3d map の画像と 2 次元の plot を
うまく重ねたかったようですが、
それは set size, set origin も多少は使えますが、
むしろ set {b,t,l,r}margn が使えます。
ただし、gnuplot-4.0 では set {b,t,l,r}margn は整数しか指定できないので
あまり微妙な調節はできませんが、CVS 版なら実数値が指定できるので
ちゃんと重なるように調整できると思います。
(811 の記事から始まるスレッド
「pm3dによる等高線図(カラーマップ)に2次元グラフを重ねる方法」)
-
djgpp を用いて CVS 版 gnuplot のコンパイルをしているが、
gd ライブラリあたりがどうもうまくいかない、
という松岡さんの報告がありました。
(824 の記事
「re(1):線種と線色の分離」)
-
3 変数関数のグラフは splot でも書けませんが、
等高面のグラフを書くことで疑似的に関数の様子を知ることはできます。
市販のソフトにはそういう機能があるものもあるでしょうが、
gnuplot にはそういうことを簡単にやる仕組みはありませんから、
とりあえずは等高面のデータを外部 (あるいは gnuplot の table terminal)
で作成してそれを表示させる、といった感じでしょうか。
サンプルスクリプトを一つ紹介しました。
(832 の記事から始まるスレッド
「等高面を作る法(質問です)」)
-
データから smooth や fit を使って書いたグラフ上の
点のデータを取得できるか、という質問がありました。
fit を使う場合は、その決定したパラメータの値は残せますから、
それを使えば (そして必要なら print を使えば) 可能です。
松田さんがサンプルスクリプトを紹介しておられます。
smooth の場合は、
gnuplot-4.0 であればマウスの現在位置を表示できますから、
必要ならばグラフを拡大して、マウスをその座標のところに持っていって
その座標を読みとる、などという手も使えます。
(841 の記事から始まるスレッド
「re(3):補間して書いたグラフから読み取るには?」)
-
温度の "℃" を ylabel に表示するには、
という質問がありましたが、
それに対して window terminal (wgnuplot) と enhaced postscript
terminal での解が示されました。enhanced postscript の場合、
set ylabel '{\312}C'
とか、
set ylabel '{^o}C'
とかすればいいようです (フォントにもよります)。
(847 の記事から始まるスレッド
「℃の表示方法」)
-
cygwin 上で Octave を使う場合、
描画命令によっては gnuplot (pgnuplot)
以外のものが呼びだされるようですが、
それを pgnuplot に変えるための設定の話がありました
(すみません、Octave は知りませんのでこの程度で)。
(855 の記事から始まるスレッド
「Octave + Cygwin の plot で pgnuplot を起動するには」)
-
cbtics の font 指定が効かない、という話が出ました。
マニュアルには xtics 同様と書いてはあるものの、
ソースを調べてみると cbtics の font 指定は現在は確かに
無視されているようですので、terminal 指定のフォントになってしまいます。
ただ、これはバグというよりも、
一度そうしてみたんだけど、何らかの問題があって今はそうしていない、
といった状態のようです。
(861 の記事から始まるスレッド
「version 4.0 の cbtics」)
-
3 次元描画において、軸を入れかえる (x 軸まわりに 90 度回転)
ことは可能か、という質問がきました。
set view で視線を変えるという方法の他に、
using + pm3d を使って変えたように見せることも可能、
という方法 (gnuplot のデモにある方法) が紹介されています。
(867 の記事から始まるスレッド
「座標系の変更」)
- (06/19 2005)
(しおり用)
現在の CVS 版には文字列変数という機能があり、
s = "こんなんができます"
set title s
のようなことができるようになりました。
最近は、各種出力形式の font 名の指定にも
そのような文字列変数が使えるようになりました。
ところが、title や {x,y}label 等の font 指定には
なぜか文字列変数が使えていませんでした。
src/set.c への以下のパッチで使えるようになるようなので、
後で本家にも送ってみます。
但し、これは title, {x,y,z}label のみに有効で、
set label の font 指定には未対応です。
また、これはあくまで現在の CVS 版 (06/19 2005 現在) に対するもので、
例えば gnuplot-4.0 には使えません。
(cf. 「情報やメモ (06/26 2005)」)
- (05/02 2005)
(しおり用)
前回の報告 (03/26 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- bind コマンドが、オプション指定により
描画ウィンドウ以外のウィンドウでも有効にできるようになった
(bind allwindows)
- pause mouse に終了条件 (pause 解除のボタンを指定等)
を指定できるようになった
- gif terminal で GIF アニメーションが作れるようになった
(libgd の 2.0.29 以降が必要)
- set pm3d の設定なしに pm3d が (splot x*y with pm3d 等で)
使えるようになり、
それに伴い set pm3d の {explicit|implicit} オプションの仕様が
改良された
- set border による境界を、描画要素に上書きするか下に書くかを
選べるようになった (set border {front|back})
- Win32 のOpenWatcom コンパイラ用の Makefile 等が更新された
- いくつかの terminal のオプションの font 名や title 名に
文字列変数が使えるようになった
- x 軸が対数軸である場合の set boxwidth の仕様の変更
今回の目玉は GIF animation でしょうか。
CVS 版 gnuplot のデモがおかれているページにある
animation デモのページ
にも、この機能を利用した animation GIF ファイルが置かれています。
今までは単に load + reread を利用した animation だったのですが、
それを gnuplot 上で animation GIF ファイルにすることができます。
(cf. 「情報やメモ (06/19 2005; no.3)」)
- (03/26 2005)
(しおり用)
前回の報告 (03/09 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- plot に linecolor (lc) オプションが追加され、
線種とは独立に線色を指定できるようになった
- using による文字列値出力に空白を含めることができるようになった
- plot notitle の後ろに無視されるタイトルを書けるようになった
- table 出力が terminal ではなくなり、
"set table 'outfile'" という形式になった。
- with image での描画の際には線種番号が増加しないようになった
table の変更も大きいですが、
個人的には最初の線色の指定の変更がとても大きいと思います。
そのうちにそうなるんだろうなあと思っていましたが、
最近の CVS 版の仕様の変更によってそれが可能になった、
という印象があります。
また、notitle の後ろに無視するタイトルが書けるというのは、多分
plot f(x) title "タイトル"
というものの title を表示させないようにするときに
plot f(x) notitle "タイトル"
と、no をつけるだけ ("タイトル" を消さなくても)
でできるようにしたものだと思います。
(cf. 「情報やメモ (05/02 2005)」)
- (03/18 2005)
(しおり用)
gnuplot-FAQ が更新されていますので、
gnuplot-4.0.0 用のもの (gnuplot ソース配付物に含まれる FAQ)
の訳を
「gnuplot-FAQ (日本語訳)」 に追加しました。
- (03/09 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
グラフの色番号の規則は、という質問がありましたが、
現在の CVS 版 gnuplot では (pm3d が可能な出力形式では)
グラフの色として従来の "lt <n>" の形だけではなく、
"lt rgb [色]" のような柔軟な色指定ができるようになっています。
[色] の指定の仕方は、定義済みの色名 (show palette colornames で参照可)
や "#RRGGBB" の 16 進 3 桁の RGB 指定が可能です。
色名の出自はどうも X の rgb.txt ファイルのようです。
(798 の記事から始まるスレッド
「色のパラメータ」)
-
DJGPP 版の gnuplot を使えば、MS-Windows でも postscript terminal の
標準エラー出力を、
gnuplot test.plt 2> err.txt
のようにファイル化できると松岡さんの報告がありました。
(797 の記事
「re(7):対話モードでの起動方法」)
-
「情報やメモ (03/09 2005)」
でも紹介しましたが、CGM terminal で monochrome オプションを指定すると、
いくつかの点種が表示されないというバグが松岡さんによって報告され、
それが松田さんによって修正され、
それが CVS 版の gnuplot に採用されました。
(793 の記事から始まるスレッド)
「wgnuplot cgm Terminal mono バグ?」)
-
横に伸びる棒グラフを書きたい、という質問が出ましたが、
基本的にはそういう命令はありません。
普通には縦に伸びるグラフを 90 度傾けてそれを得る、
ということを考えます。
そのために、x 軸や y 軸の見出しを回転させるような機能は
既に gnuplot にあります。
また、CVS 版の gnuplot では棒グラフは with histograms で書けるので
それも利用できます。
他に、データを前処理しておいて、
無理矢理太い線で水平のグラフを書く、という別解が示されましたが、
元記事の方が出力したかった PNG terminal では
残念ながら太いグラフが書けません。
PNG terminal の線の太さには限界があるようです。
「情報やメモ (03/09 2005)」
に書いたように、
現在の CVS 版では PNG terminal でも線の太さが多少は
太く出せるようにはなったのですが、
それでもそんなに太くは出せないようです。
(779 の記事から始まるスレッド
「横棒グラフを作るには?」)
-
松岡さんの MS-Windows 版の gnuplot に関する WWW ページで、
WSH を利用した小技が紹介されているようです。
(776 の記事から始まるスレッド
「WSH (Windows Scripting Host) を利用した
postscript terminal を使うときのための小技ツール」)
-
set label の front オプションを使うと、
マウス位置を示す数字のフォントが変わってしまうようです。
ただし、その辺りのフォントの使われ方は、
あまり厳密にはなっていないようです。
(773 の記事から始まるスレッド
「re(4):X11 terminal の mbfont patch」)
-
set term postscript enhanced を使う人は、8 進の PS 文字コード表が
欲しくなると思いますが、
ソースの配付物に含まれる docs/psdoc/ps_guide.ps の
2 ページ目がそういう表になっています。
バイナリ配付物を利用している人は持っていないかも知れません。
(765 の記事から始まるスレッド
「8 進文字コード表 (post enh)」)
- (03/09 2005)
(しおり用)
前回の報告 (02/15 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- configure 時に選択できたいくつかの新しい機能、実験的機能が
デフォルトになった
- plot with candlesticks の whiskerbars オプションの追加
(上下の髭の先に水平線を引く)
- いくつかの出力形式で dot サイズが linewidth で変更可能に
- "fs" は "fillstyle" とも書けるようになった
- EMF, PNG/GIF/JPEG terminal に linewidth オプションが追加
- PNG/GIF/JPEG terminal で塗りつぶし密度指定が効いていなかった bug fix
- pdf terminal に以下のオプションの追加
- {rounded|mutt}: 線分の接続部分を丸める/尖らせる
- {mono|color|colour}: 白黒モード/カラーモード
- {solid|dashed {dl <dashlength>}}: 点線モードの追加
ドキュメントも、フォントが pdflib 依存であるように修正された
- ps terminal の点線出力部分の改良
- x11 terminal の多角形内部の塗りつぶし部分の改良
- x11 terminal に文字の回転の遅い制御ルーチンを追加
- stringcolumn(x) 関数の追加 (column(x) の文字列値版)
- cgm terminal の monochrome モードの bug fix (by 松田さん)
x11 terminal の文字回転の遅いルーチン、というのは、
通常の速いルーチンだと背景色と文字色の組み合わせによっては
その文字列周辺が汚くなることがあるようです。
そういえば、マルチバイトパッチのサンプルでそんなものを
見たような気がします。
(cf. 「情報やメモ (03/09 2005; no.2)」,
「情報やメモ (03/09 2005; no.2)」,
「情報やメモ (03/26 2005)」)
- (03/08 2005)
(しおり用)
「情報やメモ (03/04 2005)」,
「情報やメモ (03/06 2005)」,
「情報やメモ (03/07 2005)」 に書いた
PNG 出力形式で TrueType フォントの回転がうまくいかない件ですが、
さざなみフォントの開発者の一人でもある狩野さんにも情報を頂き、
ようやく状況が把握できました。
どうやら以下のようなことになっているようです。
- TrueType フォントは埋め込みビットマップフォントを
持っているものがあって、
小さいサイズなどの特定のサイズのものを表示するのに使われる
(利用する側がそれをサポートしていることが必要)
- 今回回転に失敗しているフォントは
その埋め込みビットマップフォントのよう
- FreeType 2.X では埋め込みビットマップフォントを
多少サポートしているが、
そのフォントに対するフォントの回転がサポートされていないらしい
(ドキュメントを見て言っているのではなく現象から判断しているだけです)
- FreeType 2.X では、埋め込みビットマップフォントを
使わない設定もできるが、
GD ライブラリでは特にそれを指定していないので、
埋め込みビットマップがある場合には gdImageStringFT() で
それが使われてしまう
よって、gnuplot の側でそれを制御できないので、
これへの対処としては、以下のようなことが考えられます。
- FreeType 側で、埋め込みビットマップの回転をサポートするのを待つ
(原理的に可能なのかどうかは知りません)
- FreeType を、埋め込みビットマップを使用しない設定でインストールする
(ftoption.h の
#define TT_CONFIG_OPTIONS_EMBEDDED_BITMAPS
を #undef にする)
- GD ライブラリに手を入れて、gdImageStringFT() では
(少なくとも回転を行なう場合には) 埋め込みビットマップフォントを
使わないようにする
多分一番楽なのは最後のものです。この対処のための
GD ライブラリ用のパッチ (gd-2.0.33/gdft.c へのパッチ) を以下に置きます。
2 行だけなので、パッチを読んで手で当ててもいいでしょう。
一応これを当てたものを使ったら、
さざなみフォントでもちゃんと回転されることを確認しました。
以下がそのサンプルです。
- さざなみフォント (20040629 版) でのサンプル
良く見ると分かりますが、パッチ当て後のものは
xlabel と ylabel のフォントが違って見えます。
上のパッチでは、
回転する場合はアウトラインフォントが、
回転しない場合はデフォルトの読み込み方法
(よって小さいフォントの場合は埋め込みビットマップがあればそれ) が
使われますので、
xlabel は埋め込みビットマップが使われています。
もし、常に埋め込みビットマップを使わないようにするなら、
上記のパッチの "if (angle!=0.0)" を外して下さい。
情報を教えて頂いた狩野さんにはこの場をかりてお礼申し上げます。
どうもありがとうございました。
(cf.
「情報やメモ (09/13 2007)」,
「情報やメモ (10/11 2007)」,
「情報やメモ (01/07 2008)」,
「情報やメモ (03/03 2011)」)
- (03/07 2005)
(しおり用)
「情報やメモ (03/04 2005)」,
「情報やメモ (03/06 2005)」 に書いた
PNG 出力形式で TrueType フォントの回転がうまくいかない件ですが、
もう少し詳しくテストしてみたところ、
さざなみフォントや IPA フォントではフォントサイズ
(gdImageStringFT() の 5 番目の引数) によって
回転できない場合があるようです。その閾値は
- IPA フォントの場合: 12.375 以上は回転できるが 12.375 未満は不可
- さざなみフォントの場合: 16.5 以上は回転できるが 16.5 未満は不可
となっているようです。
(cf. 「情報やメモ (03/08 2005)」)
- (03/06 2005; no.2)
(しおり用)
「情報やメモ (03/04 2005)」 に書いた
PNG 出力形式で中国語を出力する件ですが、
日本語対応をしない、つまり -DJISX0208 なしでコンパイルした GD ライブラリ
(gd-2.0.28) を使った gnuplot-4.1 を作ってみました。
この場合、通常の EUC-JP の日本語は PDF 形式では表示されませんが、
元々が FreeType 経由なので
UTF-8 に変換すれば日本語もちゃんと表示されます。
以下のようなシェルスクリプトで確認しました。
#!/bin/csh -f
setenv GDFONTPATH /usr/local/share/fonts/ttf
set s = "ABCDE 日本語"
nkf -w <<EOF | gnuplot-4.1-gd-org
set term png font "sazanami-mincho.ttf"
set out 'test.png'
set ylabel "$s"
set xlabel "$s"
set label "$s" at 0,0 center rotate by 30 tc lt 2
plot sin(x)
EOF
xli test.png
gnuplot-4.1-gd-org がその gnuplot-4.1 バイナリです。
ただ、もちろん回転がうまくいかないのはそのままです。
ちなみに、
さっそくヒアドキュメントサンプルです
(cf. 「情報やメモ (03/04 2005; no.2)」)
が、"xli test.png" 位なら gnuplot スクリプト内でも
! 行で実行できますが、
setenv や nkf -w は gnuplot スクリプト内部ではできません。
こういうところがヒアドキュメントの良さです。
- (03/06 2005)
(しおり用)
「情報やメモ (03/04 2005)」 に書いた
PNG 出力形式で TrueType フォントの回転がうまくいかない件ですが、
gnuplot が内部で使用している GD ライブラリの gdImageStringFT() の
サンプルプログラムを書いてテストしてみたところ、
gnuplot のテストではうまく回転されなかった
IPA フォントやさざなみフォントでもちゃんと問題なく
角度指定命令で回転されました。
もしかすると、gnuplot あるいは GD ライブラリ辺り
(FreeType ライブラリも ?) の問題かも知れません。
もう少しその辺りをテストしてみたいと思います。
(cf. 「情報やメモ (03/07 2005)」,
「情報やメモ (03/08 2005)」)
- (03/04 2005; no.2)
(しおり用)
gnuplot スクリプトは、if や relead による簡単な制御構造は持っていますし、
変数や call によるオプション引数の受渡しなども多少はできますが、
かなり制限が強くプログラミングというほどのことはできません。
よって、複雑な処理と gnuplot を組み合わせるとなると
他のプログラミング言語で gnuplot を呼び出すことになります。
通常良く取られるアプローチは、
- C, Perl, Tcl/Tk, AWK などのように popen()
(または "| gnuplot") を持つ言語で、
パイプを開いてそこに gnuplot コマンドを流す
- C, Perl, Tcl/Tk, AWK などのように system() (または exec)
を持つ言語で、
gnuplot のコマンド列を一度ファイルに出力しておいて、
system("gnuplot そのファイル") で実行する
のような形式です。
私も AWK を使うことが多いのですが (C にまでするのはしんどい)、
AWK だけでは閉じずにシェルスクリプトとも組み合わせることが結構あります。
それは、
- シェルスクリプトは十分な制御構造を持っている
- 色々な外部コマンドを組み合わせる場合は
AWK 内で外部コマンドを実行するのは少ししんどいし不自然
という理由からで、よって普段は AWK はデータ処理、
AWK を含むいくつかのコマンドを組み合わせるときはシェルスクリプト、
という風に使い分けていて、
AWK 内で外部コマンドを起動することはほとんどしません。
Perl を良く使われる方は全部 Perl 内でやられるのかもしれませんが、
私は Perl もほとんど使いません。
ただ、スクリプトの保守という点では、
一つの仕事に複数のスクリプトファイル
(gnuplot スクリプト, AWK スクリプト、csh スクリプト)
という形は少ししんどくて、
スクリプトの良さも少し失われるようにも思います。
それを避けるには、
- gnuplot スクリプト内で AWK スクリプトを ! 行で記述して、
シェルコマンドも ! 行で記述する
- AWK スクリプト内で gnuplot スクリプトも生成して
(またはパイプ "| gnuplot" を開いて)、
シェルコマンドも system() で実行する
- シェルスクリプト内で gnuplot スクリプトを生成して、
AWK スクリプトも記述する
などの手法によりスクリプトを一つにまとめてしまう、
ということが考えられますが、
上に述べたように gnuplot は制御構造が未熟、
AWK でシェルコマンドを書くのはしんどいし不自然、ということで
シェルスクリプト内にまとめたいところです。
AWK スクリプトは、シェルスクリプト内でも
cat file.1 | awk 'BEGIN{...}{\
....\
....}END{...}' > file.2
のようにスクリプトを書き下すことができるのでいいのですが、
gnuplot スクリプトは、今までは
echo "set xrange [${xmin}:${xmax}]" > file.gp
echo "set yrange [${ymin}:${ymax}]" >> file.gp
...
echo "plot '${data}' w l " >> file.gp
のようにしていました。
しかし、これは
AWK 内でシェルコマンドを system() を使って書き並べたり、
gnuplot 内で ! でシェルコマンドを書き並べるのとあまり違わないように
感じていましたが、
シェルスクリプトのヒアドキュメントを使えば
それも解消できることに気がつきました (今さらですが...)。
ヒアドキュメントは、シェルスクリプト内の文書の一部分を丸々
標準入力としてコマンドに渡す手法で、
それを使えば上の gnuplot スクリプトはシェルスクリプト内でも
gnuplot -persist <<EOF
set xrange [${xmin}:${xmax}]
set yrange [${ymin}:${ymax}]
...
plot '${data}' w l
EOF
のように、ある程度自然に記述することができます。
これは手軽で、かつ自由度がかなり高い方法なので、
今後は gnuplot スクリプトをこの方法で
すべてシェルスクリプトで記述する、ということも考えています。
gnuplot スクリプトの機能、自由度もだいぶ上がって来てはいます
(特に MS-Windows ユーザにはいいことだと思います) が、
その中で不自然に苦労するよりも
シェルスクリプトの制御構造を利用する方が
自然に行なえる処理が多いでしょう。
ただ、gnuplot の不自由な制約の中でテクニカルな手法を考えて
複雑な仕事をするスクリプトを書く、
ということにはパズル的な楽しみがあるのも事実ですし、
もちろん今後も gnuplot の可能性を検証することは
続けていきたいと思っています。
(cf. 「情報やメモ (03/06 2005; no.2)」)
- (03/04 2005)
(しおり用)
MS-Windows 上の gnuplot 4.0 で中国語を扱いたい、
という記事が comp.graphics.apps.gnuplot に流れました。
- Subject:Multi-byte fonts supported in gnuplot 4.0 ?
From:Seeker Wang ([email protected])
Date:2005-02-21 23:01:51 PST
- Subject:How to use Chinese character?
From:Seeker Wang ([email protected])
Date:2005-02-21 23:38:43 PST
(すみません、Google でみたので、Message-ID はわかりません)
質問者は PostScript terminal と PNG terminal に興味があるようですが
(Windows terminal ではちゃんと出るそうです)、
多分 PostScript terminal は現在の gnuplot 4.0 ではフォントさえ
適切に指定すれば問題はないと思います。
むしろ見れなければ、PS ファイルのビューワ、およびその設定の方が
問題なのだろうと思います。
ところが、PNG terminal (GD ライブラリ経由) の方は少し話が難しそうです。
ついでにいくつか実験して気がついたことがありますので、
それを少しまとめておきます。
なお、以下に書く wgnuplot-4.0, wgnuplot-4.1 とは、
- wgnuplot-4.0:
gnuplot の公式サイトで公開している gnuplot-4.0 の
MS-Windows 用のバイナリ
- wgnuplot-4.1:
CVS 版 gnuplot-4.1 を角藤さんがコンパイルして公開しておられる
MS-Windows 用のバイナリ
を指すものとします。
-
wgnuplot-4.0 は PNG terminal は libpng かと思ったのですが、
そうではなく GD ライブラリが使われています。
しかし、リンクしている GD ライブラリが古いのか
TrueType フォントはどうも使えないようで (英語のフォントでも)、
- set term png font '(フォント名)':
Could not find/open font when opening font (フォント名)
- set title '(文字列)' font '(フォント名)':
gdImageStringFT: Could not find/open font while printing
string (文字列) with font (フォント名)
のようなメッセージが出ます。
-
wgnuplot-4.1 ならば、英語の TrueType フォントでも
日本語の TrueType フォントでも問題はありませんが、
中国語となると問題があります。
GD ライブラリは FreeType (2) ライブラリ経由で
TrueType を扱いますから、
それにより多国語 (Unicode) に対応できているのではないかと思います。
しかし、実は wgnuplot-4.1 には (山賀さんによる) 日本語対応された
GD ライブラリがリンクされているようです。よって、
中国語表示できる TrueType フォントで中国語文字を表示しようとすると
問題が起きる可能性があります (詳しくはわかりません)。
ただ、デフォルトの GD ライブラリでは、Unicode, Shift_JIS, Big5 に
対応しているような記述もあるので、Big5 なら出るのかも知れません
(しかし、元の人がそれで解決するかどうかはわかりません)。
-
Unix 上で gd-2.0.19 とリンクした gnuplot-4.0 で試してみたのですが、
GDFONTPATH が効きませんでした。
gd-2.0.28 とリンクしたものはちゃんと GDFONTPATH が効きました。
どのバージョンの GD ライブラリから大丈夫なのかまでは分かりません。
-
gnuplot のフォント名には 64 文字まで、という暗黙の制限があります
(X11 multi byte patch を作ったときに知りました) ので、
'/usr/local/...' のように長いパス名のフォントを指定すると
失敗することがあります (gnuplot が core dump することもあるようです)。
回避策としては環境変数 GDFONTPATH にそのパス名を指定し、
フォント名はファイル名のみを記述することです。
GDFONTPATH は gnuplot の機能ではなく GD ライブラリの機能で、
そちらに長くパスを指定しても問題はありません。
しかし GNUPLOT_DEFAULT_GDFONT は gnuplot の機能なので
やはり 64 文字より長いフォント名を書くことはできません。
-
フォント名を省略してサイズのみ指定する ',14' のような指定は、
X11 terminal などではデフォルトフォントが使われるのですが、
PNG terminal では、うまく働かないようです。
-
マニュアルには、set title の書式は
set title {"<title-text>"}
{<xoff>}{,<yoff>}
{"<font>{,<size>}"}
{{textcolor | tc} {lt <line_type> | default}}
のように書かれていますが、実際には xlabel とほぼ同じで
set title {"<title-text>"}
{<xoff>}{,<yoff>}
{font "<font>{,<size>}"}
{{textcolor | tc} {lt <line_type> | default}}
と 'font' をちゃんと書かないといけません (多分マニュアルのミス)。
-
フリーの TrueType フォントとして有名な東風フォント
(kochi-*, kochi-subst-*)、
さざなみフォント (sazanami-*; * は mincho, gothic)、
IPA フォント (ipa{m,mp,g,gp,gui} 5 書体) は、
ylabel での回転がうまくいかず、
縦のまま回転したとみなされた表示になってしまってうまくいきません。
HG 明朝フォント や Cyberbit フォントなどの TrueType フォントでは
うまくいくので、
gnuplot の問題というよりもフォントの問題なのだと思います。
set title のマニュアルの問題は後で本家に報告したいと思いますし、
フォントの問題もどこかで対処できるなら報告したいと思います。
(cf. 「情報やメモ (03/06 2005)」,
「情報やメモ (03/06 2005; no.2)」,
「情報やメモ (03/07 2005)」,
「情報やメモ (03/08 2005)」,
「情報やメモ (10/01 2006)」)
- (02/23 2005; no.3)
(しおり用)
「情報やメモ (02/23 2005; no.2)」
に書いた pichart-0.3.awk の修正とも関係するのですが、
CVS 版 gnuplot (4.1) では、今までの gnuplot では問題がなかった
plot sin(x) with lines -1
では問題があり、
plot sin(x) with lines lt -1
としなければいけないようです。
ただし、これは linetype -1 だけに問題があり、
plot sin(x) with lines 3
は別に問題はないようです。
いつからこのようになっているのかは分かりません。
- (02/23 2005; no.2)
(しおり用)
「情報やメモ (02/08 2005)」、および
「情報やメモ (02/12 2005)」
で紹介した円グラフを書くための AWK スクリプト pichart-0.{1,2}.awk
ですが、サンプル画像 (X11 terminal のスナップショット)
を追加しておきました。
また、CVS 版 gnuplot (4.1) では問題があることが分かりましたので
修正しました。
(cf. 「情報やメモ (02/23 2005; no.3)」,
「情報やメモ (02/20 2010;
no.2)」,
「情報やメモ (02/02 2015)」)
- (02/23 2005)
(しおり用)
仕事にも関係して棒グラフを作ってみました。
現在の CVS 版の datastrings や histogram などの機能も使っていますので、
そのデモも兼ねてここにサンプルを置いておきます。
- データファイルは、うちの大学で公開している
出身地別入学者数のデータ (14 年度 ~ 16 年度)からとったもので、
県名 志願者 入学者
長野 90 37
富山 87 24
群馬 72 30
...
のようになっています (nyushi.dat)。
- gnuplot スクリプトファイル (nyushi.gp)
は、基本的には以下のようなものです。
set bmargin 5
set border 3
set ytics nomirror
set xtics nomirror
set xtics rotate
set style histogram rowstacked
set style fill pattern 1
set key autotitle column
set ylabel '(人)'
set boxwidth 0.8
plot 'nyushi.dat' using 2:xticlabels(1) with histograms lt 1, \
'' using 3 with histograms lt 3
- できあがる画像は以下のようになります (X11 画面のスナップショット)
少し gnuplot スクリプト部分を説明します。
- "bmargin" は、
x 軸の下に表示される県名をちゃんと表示させるために必要
(全角文字列の長さの計算はあまりうまくいかず、
何もしないと切れてしまうので多少手で調整する必要があります)
- "border 3" は、左と下の軸のみ表示する命令
- "{x,y}tics nomirror" は、上と右の軸の目盛りを出さない命令
- "xtics rotate" は、
x 軸の刻みの見出しを回転して縦書きにする
- "style histogram rowstacked" は、
棒グラフ (histogram) を行番号毎に書き、
複数のグラフ指定を積み上げる命令 (列毎に書く場合は columnstacked)
- "style fill pattern 1" は、
棒グラフをパターンで塗りつぶし (色でベタ塗りする場合は
"style fill solid")、そのパターンをパターン 1 から開始する
- "key autotitle colummn" (columnheader の略) は、
データファイルの先頭行の文字列を key の見出しに使うための命令
(datastrings の機能) で、これでデータの一行目にある
'志願者' と '入学者' が key の見出し文字列として使われる
- "using 2:xticlabls(1) with histograms lt 1" は、
2 列目のデータを棒グラフのデータとして使い、
1 列目のデータ (県名) を x 軸の見出しとして使う命令。
なお、"lt 1" は棒グラフを塗る色の選択としてしか作用せず、
パターンの選択は fill pattern で指定したパターンから
順に使われるのみ。
- "'' using 3 with histograms lt 3" は、
前と同じデータファイルの 3 列目のデータを前のグラフの上に
積み重ねる命令
ただし、実際の gnuplot スクリプトファイル
(nyushi.gp) は
PS 出力も考えながら作ったので、
先頭で useps という変数を設定してそれによって if コマンドで
X11 terminal と PS terminal の動作を切り替えるようになっています。
よって、少し見にくいかも知れませんし、
もちろん現在の CVS 版でないとうまく動きません。
(cf. 「情報やメモ (02/07 2015)」)
- (02/15 2005)
(しおり用)
前回の報告 (02/07 2005; no.2)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- epslatex, pslatex, pstex の統合と改良 (下記参照)
- line type に関するオプション rgbcolor に関する改良
- x11 terminal のマルチバイトフォントのサポート
(「情報やメモ (02/14 2005)」 で報告済み)
- PDF terminal に {rounded|butt} オプション
(線分の結合部分の挙動) が追加
今回 term/epslatex.trm が削除され、
epslatex, pslatex, pstex ドライバは term/pslatex.trm に統合され、
より postscript terminal との整合性が高くなりました。
そういう事情もあり、ドライバのマニュアルは term/post.trm に
まとめておかれていて、
共通オプションに関するマニュアル部分は共有されています。
新たなデモファイル (demo/epslatex.dem, demo/gnuplot.cfg)、
ディレクトリ share/LaTeX/ も追加され、
オプション、生成ファイルの形式等もかなり大幅に変更されています。
多分、むしろ以前より分かりやすくなったと思います。
なお、今回 gnuplot.doc の日本語訳と terminal の訳も更新したのですが、
上記最後の PDF terminal の修正部分は入れてありません
(訳を作った元のものはまだその変更が行なわれていなかった)。
(cf. 「情報やメモ (03/09 2005)」)
- (02/14 2005)
(しおり用)
「情報やメモ (02/07 2005)」,
「情報やメモ (01/24 2005; no.2)」,
「情報やメモ (01/24 2005)」,
「情報やメモ (01/23 2005)」,
「情報やメモ (01/22 2005)」,
「情報やメモ (01/21 2005)」
に書いた X11 terminal の日本語化パッチですが、
めでたく本家の CVS ツリーに採用されました。
----- ここから (ChangeLog より) -----
2005-02-13 Shigeharu Takeno <[email protected]>
* configure.in: New configuration option --enable-x11-mbfonts
(enabled by default). Interpretation of character encodings
is determined at run time by the LC_CTYPE locale setting.
* src/gplt_x11.c: All calls to x11 font handling routines are
conditionally substituted by the equivalent calls to multi-byte
routines if --enable-x11-mbfonts is configured, and a multi-byte
font has in fact been selected.
* NEWS term/x11.trm: Add documentation that describes the specification
of multi-byte fonts:
set term x11 font "mbfont:<primary font>;<secondary font>"
set label "foo" font "mbfont:<primary font>;<secondary font>"
----- ここまで (ChangeLog より) -----
----- ここから (src/gplt_x11.c より) -----
/* Shigeharu Takeno <[email protected]> February 2005
* Support for multi-byte fonts based, with permission, on the "gnuplot+"
* patches by Masahito Yamaga <[email protected]>
*/
----- ここまで (src/gplt_x11.c より) -----
テストに協力して頂き色々ご助言も頂いた松田@東京電気大 さん、
gnuplot+ パッチの改良に快く許可をして頂いた山賀さん、尾田さん、
パッチの改良や色々な助言、ドキュメントの修正もして頂いて
実際の更新作業もして頂いた E.Merritt さんらには
この場を借りてお礼を申し上げます。
どうもありがとうございました。
まだ多少問題はあるようですので (例えば ja_JP.UTF-8 の場合など)、
改良は続けて行きたいと考えています。
なお、最も簡単に「gnuplot+」のように日本語フォントが使えるようにするには、
X のリソースに
gnuplot*font: mbfont:kana14;k14
のようにデフォルトのフォントを指定してしまうことだと思います。
(cf. 「情報やメモ (02/15 2005)」)
- (02/13 2005)
(しおり用)
「情報やメモ (12/17 2004)」
に描いた、「むしろ半数以上の terminal が、
実行中にフォントの切り替えはまだサポートされていません」
に関してですが、現在の gnuplot-4.0 の場合、
ドライバが独自のフォント設定ルーチン (*_set_font() 関数) を
持っているかどうかを調べてみると、
- 持っている:
aifm, amiga, aqua, cgm, debug, djsvga, emf, epslatex, png (new),
jpeg, gif, grass, pcl5, mac, mp, next, openstep, pdf, pm,
post, svg, tgif, tkcanvas, x11, xlib
- 持っていない:
aed512, aed767, apollo, atari, vdi, be, cgi, hcgi, dump, dxf, dxy,
eepic, vesa, emxvga, epson180, epson60, epsonlx, nec, okidata,
starc, tandy60, excl, hercules, egamono, egalib, vgalib, vgamono,
svgalib, ssvgalib, fig, ggi, gnugraph, gpic, gpr, hp2623, hp2648,
hp500c, hpgl, hpljii, hpdj, hppj, imagen, iris4d, prescribe,
kyo, latex, emtex, linux, mf, mgr, mif, mtos, pbm, dospc, png (old),
pslatex, pstex, pstricks, qms, regis, rgip, unipllex, sun,
tek410x, tek40, vttek, kc_tek40, km_tek40, selanar, bitgraph,
texdraw, tpic, unixpc, unixplot, vx384, vgagl, vws, win
のようになります。
CVS 版では多少状況は変わっているかも知れませんが、
多くのドライバではまだそれが可能ではありません。
# どなたか貢献してみませんか ?
- (02/12 2005; 02/23 2005 画像追加)
(しおり用)
「情報やメモ (02/08 2005)」
で紹介した円グラフを描くための AWK スクリプトを少し拡張しました。
楕円の長軸、短軸、中心の位置等を指定できるようにしました。
空行があったら別の円グラフを描けるように、と考えたのですが、
それは multiplot でやった方が良さそうな気もするので、
また少し考えてみたいと思います。
そこまでいけば gnuplot への実装も可能かも知れませんね。
# 卒研ネタにでもならないかな ?
(cf. 「情報やメモ (02/23 2005; no.2)」,
「情報やメモ (04/04 2008)」,
「情報やメモ (02/20 2010;
no.2)」,
「情報やメモ (02/02 2015)」)
- (02/08 2005; 02/23 2005 画像追加)
(しおり用)
gnuplot に付属する FAQ にも書かれていますが、
gnuplot には直接円グラフを描く機能はありません。
しかし、現在の gnuplot-4.X ならば "with filledcurve"
の機能を使えば多少 2 次元的な円グラフを描くことができなくもありません。
例えば以下のようにします。
# 地球の大気組成 (%)
21 酸素
78 窒素
1 その他
のようなデータの円グラフを作る場合は、
次のような gnuplot コマンドを実行します。
set size square
set key out
unset xtics
unset ytics
set xrange [-1.2:1.2]
set yrange [-1.2:1.2]
set parametric
set trange [0:1]
fx(t,a,b)=sin((a+b*t)*2.0*pi/100.0)
fy(t,a,b)=cos((a+b*t)*2.0*pi/100.0)
plot \
fx(t,0,21),fy(t,0,21) with filledcurve xy=0,0 title '酸素 21%',\
fx(t,21,78),fy(t,21,78) with filledcurve xy=0,0 title '窒素 78%',\
fx(t,99,1),fy(t,99,1) with filledcurve xy=0,0 title 'その他 1%'
このような gnuplot コマンド列 (gnuplot スクリプト) を、
データから生成してくれる AWK スクリプトを作ってみました。
上の 4 行のデータファイルを hoge.dat とすれば、
awk -f pichart1.awk hoge.dat | gnuplot -persist
で実行できます (もちろん上の例では
gnuplot が日本語に対応していなければ文字化けします)。
- サンプル画像 (02/23 2005 追加)
なお、この awk スクリプトは以下のような仕様になっています。
- 1 列目をデータの値、2 列目をデータの名前とみなす
- 空行、'#' で始まる行は無視する
- 2 つの動作モード (mode) があり、
- mode=0 のときは、データは絶対的な値 (相対的な値ではなく) とみなし、
合計で割った割合を使用する (default)
- mode=1 のときは、データは百分率 (%) を意味するとみなし、
合計が 100 に満たない時は足りない値を「その他」とする
- 扇の境界線も描く (bdry=0 とすると境界線は描かない)
mode や bdry を変更する場合は、はスクリプトを直接編集する手もありますが、
awk の -v オプションを使って
awk -f pichart1.awk -v mode=1 -v bdry=0 hoge.dat | gnuplot -persist
のようにすることもできます。
出力を手直ししたい場合は、
awk スクリプトを直接修正してもいいでしょうが、
awk スクリプトの吐く gnuplot スクリプトを修正する方が楽かも知れません。
ただ、もうちょっと気の効いたものだと
高さをつけて 3D 的に斜めから見たような円グラフなども
目にすることがありますが、
それは現在の gnuplot での実現はちょっと難しそうです。
(cf. 「情報やメモ (02/12 2005)」,
「情報やメモ (02/23 2005; no.2)」
「情報やメモ (02/14 2007)」,
「情報やメモ (04/04 2008)」,
「情報やメモ (02/20 2010;
no.2)」,
「情報やメモ (02/02 2015)」)
- (02/07 2005; no.2)
(しおり用)
前回の報告 (01/06 2005)以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- 「情報やメモ (01/06 2005)」
に書いた、set multiplot の {column,row}major オプションが
{columns,rows}first になった
(「情報やメモ (01/09 2005)」
でも既に報告済み)
- 日時 format 指定 (set format の date_specifiers 参照)
が少し変更された (%k が 0--23, %H が 00--23 (常に二桁),
%l が 1--12, %I が 01-12 (常に二桁) になり、
%l,%I の範囲も [0:11] から [1:12] になった)
- set label の textcolor 指定に 'textcolor ls <n>'
(line style <n> で使われている色を指定)、
および 'textcolor rgb <foo>' が追加された
- Postscript 系 terminal (postscript, epslatex, pslatex) で、
出力ファイルに使われる変数が統一された
(pslatex や epslatex terminal では特に有用、と ChangeLog には
書かれていますが、どちらも使わないのでよくわかりません)
- set margin で指定できる数が整数から実数に変わった
- PDF ライブラリのいくつかのバージョンに対応できるようになった
- PDF terminal の出力にユーザ名等の情報が含まれるようになった
- ユーザ名取得関数の修正
- Tgif terminal の改行に関するバグの修正
(「情報やメモ (01/13 2005)」
でも既に報告済み)
- src/win/pgnuplot の 8bit 文字列で落ちる問題の修正
(「情報やメモ (01/30 2005)」
でも既に報告済み)
- splot with vectors ではデータファイル中の空行を無視するようになった
- linetype (色、点線等の種類) を pm3d 色の前に適用するようになった
現在の CVS 版では、pm3d をサポートしている出力形式では曲線の色は
plot sin(x) lt rgb "#FF00FF"
のように自由に選ぶことができますが、
今回の変更ではそれに加えてラベル文字列の色についても
かなり自由度が上がったということを指します。
(cf. 「情報やメモ (02/15 2005)」)
- (02/07 2005)
(しおり用)
「情報やメモ (01/24 2005; no.2)」 に書いた、
X11 terminal の日本語化パッチですが、
本家に送ってみたところ Ethan Merritt さんから意見を頂き、
それを元に修正してみました。
実質的な機能の変更はありません。
gplt_x11.c revision 1.124 へのパッチで
(注: 現在の CVS ツリーの最新版は 1.125 です)、
今までは条件分岐版と wrapper 関数利用版の 2 つを置いていましたが、
wrapper 関数利用版をさらに押し進めた形のもの一本にしました。
gplt-mbfont-dbg.diff の方は、
私がこのパッチの改良の際に使用している debug 用のコードと
ほぼ同様のものです。
stderr にフォントに関する情報を出力しますので、
マルチバイト文字列がうまく出力されない、
あるいは指定したはずのフォントで表示されない、
などの場合に参考になると思います。
なお、見やすい出力などにはしておらず、
単にフォントの検索部分に fprintf(stderr,...) を埋め込んでいるだけで、
かなり大量の文字列が出力されてしまいます。
(cf. 「情報やメモ (02/14 2005)」)
- (01/30 2005; 01/31 2005 一部修正)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
「情報やメモ (01/06 2005; no.2)」
にも書いた key 内の文字列の改行の話ですが、
現在の CVS 版では key の表示には改行が使えますが
その仕様の変更によってフォントの設定もできるようにはできそうですが、
まだそうはなっていません。
ただし、set term postscript enhanced ならばフォント指定が行なえるので、
例えば gnuplot-4.1 では
set term postscript enhanced
plot sin(x) title "{/GothicBBB-Medium-EUC-H こちらが一行目}\n
{/GothicBBB-Medium-EUC-H こちらが二行目}"
のようにすれば改行とフォント指定の両方が実現できます
(けどかなり面倒ですね)。
(649 の記事から始まるスレッド
「postscript 出力での凡例文字列は改行できないのでしょうか?」)
-
MS-Windows 版の gnuplot 4.0 の png terminal での日本語表示は、
本家に置いてある gnuplot-4.0 のバイナリではできませんが、
角藤さんが CVS 版をコンパイルして配付しているバイナリ (gnuplot-4.1)
では
set term png
set out 'hoge.png'
set title 'ほげほげ' font 'c:\windows\fonts\msmincho.ttc'
plot sin(x)
等でできるようです。
他の解としては、
MS-Windows XP のペイントは PNG 形式のセーブをサポートしているので、
- win terminal でグラフを書いておいて
- そのグラフウィンドウをクリップボードにコピーして
- ペイントに貼りつけて PNG 形式でセーブする
というやり方があるそうです。
(679 の記事から始まるスレッド
「教えて!pngファイルの日本語表示」)
-
日本地図の上に、各県の人口データのようなものを
棒グラフで表示できないかという質問がありましたが、
元記事の方は再新版の gnuplot に日本地図のデータが含まれている、
と聞いたそうですが、
demo ディレクトリに世界地図のデータならありますが、
残念ながら日本地図のデータは含まれていません。
しかし、その demo ディレクトリの世界地図と同じやり方で
日本地図のグラフを書かせることは可能です。
日本地図に関しては、
という情報があり、実際にそれをサンプルとして、
impulse を使った疑似的に 3D 棒グラフを使った
見事な解が示されました
(695
番の記事 by 松田@東京電気大 さん)。
このデータは色んな活用ができそうで、是非手元に置いておきたいです。
元記事の方が聞かれたように、gnuplot の配付に含めたいくらいですね。
(683 の記事から始まるスレッド
「地図上にグラフ表示」)
-
postscript terminal で数式などで斜体を使う場合、
フォント名として 'Symbol-Oblique' のように 'Oblique' を使うといい、
という話題が出ました。
一応 gnuplot-4.X の postscript のヘルプには
「標準的な postscript フォント以外に、数式を表現するのに便利な
oblique Symbol フォント ("Symbol-Oblique")
が定義されています。」
と書かれていますが、Postscript の欧文フォント名は慣習として、
"[ファミリ名]-[スタイル属性]" のような形式になっていて、
そのスタイル属性としては
- Italic (斜体: デザイナが斜体としてデザインしたもの)
- Oblique (斜体: 元々は斜体でないフォントを機械的に傾けたもの)
- Bold (太字)
- Book (普通の太さ)
- Roman (立体)
のような物が使われるそうです
(組み合わされて "BookOblique" のようになることもあります)。
postscript enhanced オプションを多用して
フォントを色々切り替える必要がある場合は、
基本的な Postscript フォント
(基本 14 書体とか基本 35 書体とかがあるようです)
の一覧は手元に置いておくといいかも知れませんね。
例えば最新版の「LaTeX2e 美文書作成入門 (改訂第 3 版)」にも
載っています。
(700 の記事から始まるスレッド
「斜体 (post enh)」)
-
Y 軸の上下を逆転したい (下に値が増えていくようにする) 時は、
- 単に yrange の設定で "set yrange [10:-10]"
のように逆に指定する
- yrange のオプションとして reverse を指定して、
"set yrange [-10:10] reverse"
のようにする
のような解があります。
ただし、自動的に縮尺を合わせたい場合 (autoscale) は後者を使って
"set yrange [] reverse"
"set yrange [*:*] reverse"
のようにする必要があります。
なお、実験してみると、
set yrange [1:0]
set yrange [1:0] reverse
set yrange [0:1] reverse
は全部同じになりました。特に 2 番目のは紛らわしいですね。
(703 の記事から始まるスレッド
「Y 軸の設定」)
-
"plot sin(4*x)" でグラフを書いたら
ガタガタなグラフが出て愕然とした、という記事がありました。
確かに gnuplot の曲線描画は、
適当なサンプリング数の点に対して折れ線を繋いで書いているだけですし、
グラフに応じてサンプリング数を調節したりはしませんので
そういうことも起こりますね。
その辺が一部の人には評判が悪い原因でしょうか。
ちなみにこれに関しては、
単に "set samples" でサンプル数を増やしてあげれば
解決します。
(711 の記事から始まるスレッド
「滑らかな 2D グラフを書く方法は?」)
-
MS-Windows 上で秀丸のマクロを使って gnuplot を使用する
マクロを書いている、という話題がありました (716 番の記事)。
元記事はエラー時の処理に関する質問だったのですが、
それに関連していくつかの情報が載り、長いスレッドになりました。
といった記事が載りましたが、
その後 wgnuplot を直接使うのではなく
pgnuplot と gawk の組み合わせの話になり、
- pgnuplot は日本語を食わせると落ちてしまう
- gawk 内で pgnuplot へ pipe をしても fflush() がうまくいかない
などの問題点が指摘されました。
前者の問題は、松岡@名古屋大 さんが原因を突き止められ、
src/win/pgnuplot.c の修正を行なわれ、
CVS 版にめでたくその修正が取り入れられたようです。
なお、松岡@名古屋大さんは、元記事の方の目的のために
pgnuplot を使ってエラーでも wgnuplot を落ちないようにするプログラム
wgpspause も作られて以下で公開しておられます。
また、後者の pipe への fflush() の問題は
gawk の版によるようで、例えば gawkmb115 では、
- 以下のようなスクリプト (hoge1.awk)
BEGIN{p="pgnuplot -persist -"}
{print |p; fflush(p)}
END{getline < "/dev/stdin"}
を "gawk -f hoge1.awk hoge.plt" した場合は、
本来は hoge.plt の各行の内容を全部 pgnuplot に渡した後で
改行入力待ちになるはずなのに、
実際には pgnuplot に出力を渡しておらず、
改行を入力した後で全部が pgnuplot に渡される
(つまりパイプへの fflush() がうまくいっていない)
- 以下のようなスクリプト (hoge2.awk)
{print; fflush()}
END{getline < "/dev/stdin"}
を "gawk -f hoge2.awk hoge.plt | pgnuplot -persist -"
とした場合は、期待通り
hoge.plt の各行の内容を全部 pgnuplot に渡した後で
改行入力待ちになる
のようになるようですが、例えば UnxUtils
(
http://unxutils.sourceforge.net/)
に含まれる gawk の場合はどちらもうまくいくようです。
gawk2154 にはそもそも fflush() がありませんでした。
なお、この UnxUtils は私のように普段 Unix を使っている人が
たまに MS-Windows のコマンドプロンプトを触る場合はとても便利です
(本格的に使うには Cygwin の方がいいのかも知れませんが、
私のように MS-Windows はちょっとしか触(らない|りたくない)人には
Cygwin よりずっと手軽です)。
早速手元の MS-Windows XP にはインストールして path を通しました。
(716 の記事から始まるスレッド
「対話モードでの起動方法」)
-
現在、gnuplot-beta ML では POV-Ray terminal の話題が
盛り上がっているようです。
POV-Ray は、Unix でも MS-Windows, Mac (MacOS,MacOS X) でも使える
フリーのレイトレーシングツールで、
本も何冊か出ていますし、あちこちで紹介されています。
gnuplot-beta ML でいくつかサンプルが紹介されているのですが、
これがまた半端ではありません。
日本でも独立に POV-Ray, VRML terminal の開発をやっておられる方が
おられるようで、その方も ML 内でサンプルを紹介されておられました。
少し以下にイメージへのリンクとして紹介します。
- Harald Harders さん:
- Varoquaux さん:
- KITA Toshihiro さん:
ただ、個人的には、表現力は確かに上がっていて目をみはるのですが、
あまり本質的な使われ方をしてなくて、
グラフの指す内容とは関係ないところを目立たせるのはうーん、
という気がしなくもありません。
また、曲面だけを POV-Ray にするのであれば、
"set term table" で曲面データを吐き出させて、
それを適当に変換すればいいのでは、
なんて意見も gnuplot 開発者から出ていましたので、
今後どのように推移していくか見守りたいと思います。
(755 の記事から始まるスレッド
「POV-Ray terminal って」)
(cf. 「情報やメモ (02/07 2005; no.2)」,
「情報やメモ (09/03 2005; no.2)」,
「情報やメモ (02/14 2007)」,
「情報やメモ (10/19 2007)」)
- (01/24 2005; no.2)
(しおり用)
「情報やメモ (01/24 2005)」 に書いた、
X11 terminal の日本語化パッチですが、
マルチバイトフォントの指定時 (mbfont:) の、
フォント名を複数指定する場合、
今までは ',' (カンマ) で区切っていましたが、
gnuplot の元々の ',' 区切りのオプションとぶつからないようにしたいことと
今後の拡張のことも考え、複数の指定の場合には ';' (セミコロン)
区切りとするように変えました。
よって、
set term x11 font 'mbfont:kana14;k14'
のように指定することになりますが、実際には今のところは
set term x11 font 'mbfont:kana14,k14'
とカンマ区切りで書いても一応通ります。
今後の拡張とは、
- マルチバイトフォントセットの複数のフォントの指定を ';' 区切りに
- 各フォント名の指定は gnuplot の仕様
(>font>,<size>,<slant>,<weight>) に
ほぼ合わせる
- マルチバイトフォントの場合は、最期に追加フィールドとして
encoding 名を書けるようにする
といったことを考えています。つまり、
font 'mbfont:fixed,14,,medium,jisx0201.1976-0;k14'
font 'mbfont:*-bold-r-*--16-*;fixed,16,i,bold,jisx0208.1983-0'
のような指定を可能にしたいと思っています。
現在の gplt_x11.c はその辺はかなりゆるく書いてある
(柔軟性を持たせている &
1 バイトフォントだけを仮定して簡単に済ませている) ので、
その辺りもちゃんとしていきながら実装してみたいと思います。
(cf. 「情報やメモ (02/07 2005)」,
「情報やメモ (02/14 2005)」)
- (01/24 2005)
(しおり用)
「情報やメモ (01/23 2005)」 に書いた、
X11 terminal の日本語化パッチですが、
バグを一つ修正しました。
修正したのは、
「情報やメモ (01/23 2005)」 に書いた、
set term x11 font 'mbfont:a14,k14'
などとした場合の問題です。
従来は gnuplot_x11 が落ちていましたが (Fallbackfont が引けていなかった)
落ちないようにしました。
(cf. 「情報やメモ (01/24 2005; no.2)」,
「情報やメモ (02/14 2005)」)
- (01/23 2005)
(しおり用)
「情報やメモ (01/22 2005)」 に書いた、
X11 terminal の日本語化パッチですが、
再び松田さんからの提案を取り入れ、
Ryumin-Light, GothicBBB-Medium の部分を修正しました。
不十分な対応だと思っていたところ、まさに的確なアドバイス、
本当にどうもありがとうございました。
ついでに、これも松田さんからの提案によるデモを作りました。
set term x11 font 'mbfont:kana14,k14'
set title 'This is test' font '*-bold-r-normal--16-*-iso8859-1'
set xlabel '漢字: これは xlabel' font 'GothicBBB-Medium-EUC-H,16'
set ylabel '漢字: これは ylabel' font 'Ryumin-Light-EUC-H,24'
set label "回転する日本語フォント" rotate by 60 \
font 'GothicBBB-Medium-EUC-H,24' tc lt 3
plot sin(x) title '漢字: これは sin(x)'
pause -1
ところで、
「情報やメモ (01/21 2005)」,
「情報やメモ (01/22 2005)」 の注に、
set term x11 font 'mbfont:a14,k14'
と書きましたが、少なくともうちの環境 (XFree86-3.3.6) では
a14 は iso8859-1, k14 は jisx0208 のフォントで、
ja_JP.EUC locale ではフォントセットには半角英数フォントとして
iso8859-1 ではなくて jisx0201 フォントが必要なようです。
ただし、ko_KR.EUC, zh_CN.EUC ではそれぞれの半角英数フォントセットである
ksc5636, gb1988 は、その代わりに iso8859-1 が含まれていれば
それでいいようなので、
単にうちの XLOCALE 環境の設定の不具合なのかも知れません。
とりあえずうちの環境では
set term x11 font 'mbfont:a14,k14'
ではなくて、
set term x11 font 'mbfont:kana14,k14'
でないといけないようです。
(cf. 「情報やメモ (01/24 2005)」,
「情報やメモ (02/14 2005)」)
- (01/22 2005)
(しおり用)
「情報やメモ (01/21 2005)」 に書いた、
X11 terminal の日本語化パッチですが、
のような修正を行ないました。以前のパッチは
いくつかバグを含んでいるようですので、
新しいものをお使い下さい。
これにより、今度は以下のようなことができることになります。
- テスト 1: gnuplot の X11 font 形式のサポート
set encoding iso_8859_1
set term x11 font 'fixed,14,r,bold'
set title 'This is test' font 'DEFAULT,20'
set xlabel '漢字: これは xlabel' font 'mbfont:fixed,16,r,medium'
set ylabel '漢字: これは ylabel' font 'mbfont:fixed,24,r,medium'
plot sin(x) title 'This is sin(x)'
pause -1
- テスト 2: GothicBBB-Medium, Ryumin-Light 等の利用
set term x11 font '*-demibold-i-normal--14-*-iso8859-1'
set title 'This is test' font '*-bold-r-normal--14-*-iso8859-1'
set xlabel '漢字: これは xlabel' font 'GothicBBB-Medium,16'
set ylabel '漢字: これは ylabel' font 'Ryumin-Light,24'
plot sin(x) title 'This is sin(x)'
pause -1
- テスト 3: デフォルトフォントを日本語に
set term x11 font 'Ryumin-Light,14'
set title 'This is test' font '*-bold-r-normal--14-*-iso8859-1'
set xlabel '漢字: これは xlabel'
set ylabel '漢字: これは ylabel'
plot sin(x) title '漢字: これは sin(x)'
pause -1
以下に注意をあげます。
- ここのサンプルは、あくまでうちの環境での表示例です
(Font は FreeBSD 4.7 + XFree86 3.3.6 サーバのフォント)。
- x11 の font 指定では、フォント名を省略してサイズのみ変更する場合、
",14" のような書き方が許されていますが、
この場合直前のフォントが使われます。
ところが、複数のフォント指定がある場合、
「直前」のフォントはどのフォントなのかはユーザには想像がつきません。
例えば上のテスト 1 では、
- "set term x11 font" のデフォルトフォント
- "set ylabel" のフォント
- "set xlabel" のフォント
- "set title" のフォント
- plot sin(x) の key で使われるフォント
の順にフォントが参照されていました。
よって、むしろ明示的にフォント名を書く、
あるいは "DEFAULT" とデフォルトフォントを指定するのが
よさそうです。
- 上のテスト 2 に、'*-demibold-i-normal--14-*-iso8859-1' と
指定されていますが、gnuplot の weight 指定は 'medium', 'bold', '*'
しかサポートされていませんので (しかもやや不十分)、
'demibold' のような font を使うにはこのように直接
X 論理フォント名 (XLFD) を指定する必要があります。
- 上のテスト 3 では、半角英数字に bold フォントが
使われてしまっていますが、
これはテスト 3 のような指定の仕方では残念ながら
まともな選択ができません
(ワイルドカード指定に最初に見つかった物が使われてしまいます)。
実際に Ryumin-Light と GothicBBB-Medium の実装は、
- Ryumin-Light: '-*-mincho-medium-[slant]-*--[pointsize]-*'
- GothicBBB-Medium: '-*-gothic-bold-[slant]-*--[pointsize]-*'
のような XLFD に置き換えて検索をしています
(失敗した場合は '*-[weiht]-[slant]-*--[pointsize]-*') ので、
jisx0208 と jisx0201 のペアがうまくそれで早く見つればいいのですが、
そうでない場合は半角英数とのバランスはどうしても悪くなります。
よってむしろ、
"set term x11 font 'mbfont:*-medium-r-normal--14-*'"
"set term x11 font 'mbfont:a14,k14'"
などのように指定した方が、
まともなフォントセットが使えるようになると思います。
最後に、松田さんには貴重なご意見とパッチのテストの報告を頂きました。
どうもありがとうございました。
(cf. 「情報やメモ (01/23 2005)」,
「情報やメモ (02/14 2005)」)
- (01/21 2005)
(しおり用)
山賀さん、尾田さんの gnuplot+ パッチを元に、
CVS 版の gnuplot (4.1) の x11 terminal で日本語 (マルチバイトフォント)
が使えるパッチを作ってみました。src/gplt_x11.c へのパッチです。
もう少しテストしてみて、よさそうなら本家にも送ってみます。
上記の物には実用上は差はありませんのでどちらでも同じように使えます。
gnuplot+ パッチ同様、日本語を使う場合は
- 日本語の locale が必要 (X11 で使える必要がある)
- 環境変数 LC_ALL を ja_JP.EUC 等日本語の locale に設定して実行
- フォントの指定は mbfont: を先頭につける
のような条件があります。サンプルを以下にあげます。
set term x11 font '*-demibold-i-normal--14-*-iso8859-1'
set title 'This is test' font '*-bold-r-normal--14-*-iso8859-1'
set xlabel 'これは xlabel' font 'mbfont:*-medium-r-normal--16-*-'
set ylabel 'これは ylabel' font 'mbfont:*-medium-r-normal--24-*-'
plot sin(x) title 'This is sin(x)'
pause -1
の出力が以下のようになります。
まだまだ不安定だろうと思います。
使用して何か気がついたことがありましたら、是非ご連絡下さい。
少し詳しい注意を書きます。
-
基本的にフォントを行なう場所は通常のフォント指定と同じです。
set term x11 のオプションとして指定することも可能です。
-
マルチバイトフォントの切り替えは、
set encoding などとは無関係に行なっていて、
フォント名の先頭に "mbfont:" と書くことのみによって
行なっています。
-
よって、英文フォントで使用できる
<font>,<size>,<slant>,<weight>
のフォント指定形式は現在ではサポートしていませんし、
PostScript フォント名での指定もサポートしていません。
むしろ、その mbfont: を取り除いてちゃんと参照できるフォント名
が指定されている必要があります。
-
マルチバイトフォントの出力では、一般に単独のフォントではなく、
例えば 2 バイトフォントと通常の 1 バイトフォントの組み合わせ、
といったフォント集合によって表示します。
よって、例えば上の例のように
'mbfont:*-medium-r-normal--16-*-'
とフォントを指定した場合、そのワイルドカード指定に対応した
日本語フォント ('*-jisx0208.1983-0' 等)
と英文用のフォント ('*-jisx0201.1976-0' や '*-iso8859-1' 等) が
見つかる必要があります。もし、見つからなければ
'mbfont:*-medium-r-normal--14-*-,*-medium-r-normal--16-*-,'
のようにカンマ区切りで複数のフォント名を指定して下さい (今の所)。
-
このマルチバイト化は特に日本語限定としている訳ではありませんので、
他のマルチバイト言語でも出力できると思います。
実際に手元では ko_KR.EUC, zh_CN.EUC ではうまくいっているようです
(逆に zh_TW.BIG5, zh_TW.EUC ではどうもうまくいきません)。
-
マルチバイトフォントの検索に失敗した場合は、
英文のフォントで表示することになります。
-
マルチバイトフォントでは、フォント名を省略してサイズのみ変更する
(',14' 等) はサポートしていません。
-
enhanced への対応はまだ行なっていません。
-
長すぎるフォント名を指定すると認識されない可能性があります。
-
X のリソースの値としてマルチバイトフォントを指定することもできます。
gnuplot の X のデフォルトリソースファイル
(デフォルトでは "/usr/lib/X11/app-defaults/Gnuplot")
の font として
*font: mbfont:*-fixed-medium-r-normal--14-*
のように書く、あるいは ~/.Xdefaults の gnuplot.font の値として
上のようなフォント指定を書いておけば、
gnuplot+ 同様特にフォントを指定しなくても
デフォルトで日本語が使えるようになります。
これは
set term x11 font 'mbfont:*-fixed-medium-r-normal--14-*'
を設定したのと同じことになります。
-
X のフォントエイリアス名も指定可能ですので、
set term x11 font 'mbfont:a14,k14'
のようにすることもできます。
-
gplt-mbfont1.diff と gplt-mbfont1.diff の違いは、
それを見れば分かると思いますが、
マルチバイト出力するかどうかを if 文で明示的に条件分岐するのか、
その部分の違いを吸収する wrapper 関数を使うのか、
の違いでしかありません。
本家に送る場合はどちらにしようかなと少し迷っています。
-
ソースの先頭の方に FallbackFontMB というマクロ定義がありますが、
これは指定されたマルチバイトフォントの検索に失敗した場合に利用される
マルチバイトフォント名です。
必要ならばご利用の環境で使用可能なフォント名に書き換えて下さい
(特に、ko_KR.EUC や zh_CN.EUC では書き換えが必要かも知れません)。
このパッチは、基本的に山賀さん、尾田さんの gnuplot+ パッチの
x11 terminal 部分を少し改良しただけの物です。
この改良に関して、山賀さん、尾田さんには快く許可をして頂きました。
どうもありがとうございました。
(cf. 「情報やメモ (01/22 2005)」,
「情報やメモ (01/23 2005)」,
「情報やメモ (02/14 2005)」)
- (01/18 2005)
(しおり用)
gnuplot-4.X では x11 terminal で font を指定することができますが
(日本語は gnuplot+ パッチなしでは現在は不可)、
予期せぬフォントが使われようとする場合があります。
例えばうちの環境では、
set term x11 font "fixed,16"
のように指定したら文字や数字が一切表示されませんでした。
これは、この指定により X の
"-*-fixed-*-*-*-*-16-*-*-*-*-*-*-*"
というフォントが検索されるのですが、
それが英語のフォントより先に日本語のフォント
(うちの場合は
"-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0"
でした) を見つけてしまっていて、
それが設定されてしまってそれで表示できなくなっていました。
このような場合は、
set encoding iso_8859_1
set term x11 font "fixed,16"
のようにすると、"-*-fixed-*-*-*-*-16-*-*-*-*-*-iso8859-1"
というフォントが検索されるので、
間違いなく英文フォントが検索されます
(もちろん該当するフォントがなければダメですが)。
- (01/13 2005)
(しおり用)
「情報やメモ (01/07 2005)」 に書いた、
Tgif terminal の title 等で改行を入れると文字化けする件ですが、
そのパッチが本家に採用されたようです。
(cf. 「情報やメモ (02/07 2005; no.2)」)
- (01/09 2005)
(しおり用)
「情報やメモ (01/06 2005)」 に書いた、
multiplot の {column,row}major の振舞いが逆かどうかの問題ですが、
実は column と row は分野によって全く逆に見る場合もあるらしく、
ちょっとややこしい問題のようなのですが、
少なくとも {column,row}major という名前はやや紛らわしいので、
結局今回の修正に合わせて
{columns,rows}first という名前になり、それぞれ
- columnfirst = column (列) が最初に埋まる
- rowsrow (行) が最初に埋まる
ことを意味するようになりました。
(cf. 「情報やメモ (02/07 2005; no.2)」)
- (01/07 2005)
(しおり用)
「情報やメモ (01/06 2005; no.2)」
に書いた、
Tgif terminal の title 等で "\n" を入れて改行すると
2 行目以降が文字化けする件ですが、以下のパッチで修正されるようです。
CVS 版の gnuplot 用 (4.1.0 用) です。本家にも送っておきます。
(cf. 「情報やメモ (01/13 2005)」)
- (01/06 2005; no.3)
(しおり用)
このページの 「リンクリスト」 に、
「gnuplot に関する文献等」を追加しました。
- (01/06 2005; no.2)
(しおり用)
gnuplot Q&A 掲示板
での見聞き等で得た情報を備忘録として書いておきます。
-
MS-Excel のデータを gnuplot に読み込ませる場合、
CSV 形式、タブ区切り形式などのデータが使えますが、
CSV 形式なら
- plot 'file.csv' using '%lf,%lf' とする (CSV の場合)
- set datafile separator "," とする (CSV の場合)
のどちらか、タブ区切りの場合はそのまま読み込ませられるが、
間に文字列が含まれている場合は
- set datafile separator "\t"
とした方がいい、等のやりかたが紹介されました。
(607 の記事から始まるスレッド)
「Excel の資料を読み込ます方法」)
-
impulse や box スタイルの描画の場合の、垂直{線|箱} の位置は
2D plot ならば x 軸 (y=0)、3D splot ならば xy 平面 (z=0) なのですが、
それを変更する機能は用意されていません。
それを無理に変更する方法として、
- グラフを上下に平行移動して、それに合わせて縦軸の数字も
ytics で手動で設定して、見かけの軸の位置を変えてしまう
- 2D plot の場合は、実際の目盛りは y 軸に書いて、
実際のグラフは y2 軸に合わせて書くことで、
見かけの軸の位置を変えてしまう
- multiplot で、
- 上下に平行移動して軸の数字を書かずに with impulse でグラフを書く
- 平行移動せずに軸の数字を書いて with point pt -1 でグラフを書く
(実際には何も書かない)
を重ね書きする
などが紹介されました。
multiplot を使う解は 2D でも 3D でも使えますし
なんとなく一番エレガントな気がします。
(638 の記事から始まるスレッド
「3 次元散布図における "impulses" について」)
-
軸の目盛りの書式は set format で変更できますが、
%e による指数表記の場合仮数部分の書式の変更は可能ですが、
C 言語では指数部分の桁数等を変更することはできません。
しかし、gnuplot はその辺りが拡張されていて、
仮数部と指数部を %t,%T で別々に取得できます。
実際には、gnuplot は内部では log10(x) を使って
x の指数部 = floor(log10(x))
x の仮数部 = pow(10,log10(x)-floor(log10(x)))
という計算をしてそれらを取得しているようです。
これなら C 言語にも簡単に応用できますね。
(645 の記事から始まるスレッド
「軸目盛の数字を変更したい」)
-
postscript terminal 上で、
plot ... title ... によって表示されるグラフの説明 (key) を
日本語で出したくてもそのフォント指定を直接行なうことはできませんが、
- gnuplot+ を使う (3.7.2 に対する山賀さんのパッチ、
3.8 に対する尾田さんのパッチ、およびそれを強引に 4.0 に当てる)
- gnuplot 4.X で、postscript terminal の default font を
日本語フォントにする
という手があります。
ただ、後者の場合は全ての文字列出力に和文フォントが使われてしまうので、
適宜
set xtics font "Helvetica,14"
set ytics font "Helvetica,14"
のように英数字などの部分を適宜英文フォントに変更する必要があります。
さらに、その説明が長くて改行を入れたい場合、
gnuplot-4.0 以前では "" 内に '\n' を入れても
実際には改行はされませんが (通常の label 等はそれで改行されます)、
CVS 版の gnuplot-4.1 ではそれでちゃんと改行されます。
ただし、自動的に計算される key の位置は、
gnuplot は改行などないとして文字列の長さを計算していますので
少しおかしな場所に出力されてしまいます。
よって、set key のオプション (spacing,width 等) を使って、
適当な場所に来るように手動でそれらを設定する必要があります。
(649 の記事から始まるスレッド
「postscript 出力での凡例文字列は改行できないのでしょうか?」)
-
上のテストをやっていて気がつきましたが、
現在の CVS 版の gnuplot では Tgif terminal でも日本語が使用できますが
(cf. 「情報やメモ (11/29 2004)」)、
Tgif terminal で例えば
set title "こんなん\nどや"
font "Ryumin-Light-EUC-H"
のようにすると、確かに改行はされるのですが
2 行目の方が文字化けしてしまうようです。
確認してみると、2 行目の方が何故か英文フォントに戻っているようです。
私のパッチが原因かも知れませんので少し調べてみたいと思います。
-
Mac OS X で gnuplot をインストールする場合、
Fink というパッケージ管理ソフトを使う場合は最新版は 3.8 のようで、
4.0 をインストールしたい場合は自分で compile する、
という方法も WWW ページで紹介されているようですが、
gnuplot-4.0.0 の Mac OS X 用のバイナリ版も用意されているようです。
私は Mac OS X は良く知らないのですが、そこに用意されている
Gnuplot-4.0.0.dmg というファイルがそれでしょうか。
(cf. 「情報やメモ (01/07 2005)」,
「情報やメモ (01/30 2005)」)
- (01/06 2005)
(しおり用)
前回の報告 (12/26 2004)
以後、
現在の CVS 版に入れられた主な機能について紹介します
(ChangeLog, manual の更新部分等より)。
- enhanced text モード周辺の改良 (文字列の長さの取得等)
- OS2 用のドライバソースの改良 (pm terminal のパターン fill 等)
- set title, xlabel (等) に {no}enhanced オプションがついた
set title や xlabel 等の {no}enhanced オプションは、
enhanced モードの時に title 等を enhanced 処理させないためのもので、
例えば '_' が含まれるファイル名などを表示するためのもののようです。
なお、multiplot の layout オプションの column (列) と
row (行) に関するマニュアルの記述が逆になっていて
それも修正されたようですが、
{column,row}major の振舞いの方もなんとなく逆なのではないかと
思っています。
(cf. 「情報やメモ (01/09 2005)」,
「情報やメモ (02/07 2005; no.2)」)