ページが長いので「しおり」の仕組みを用意してみました。
「しおり用」と書かれた所をクリックしてからブックマークに入れると、
それはページの先頭ではなく、その箇所へのブックマークになります。
(03/03 2006)
今までちゃんと説明していませんでしたが、
ここには、日付ごとに記事 (記事 A とします) を書いていますが、
その最後に、(cf. 「情報やメモ (XX/XX 20XX)」)
のように別な日付の記事 (記事 B とします)
へのリンクがついているものがあります。
これは、「被参照リンク」で、
記事 B が記事 A を参照している (リンクを貼っている) ことを意味します。
つまり、記事 B の方が記事 A より後の記事であり、
記事 A の続きや追加情報、訂正などの内容であったり、
記事 A に関連する別な話題であったりしますので、
記事 A に被参照リンクがついている場合は、
是非そちら (記事 B) もご覧ください。
(01/29 2014)
前回の報告 (09/22 2014)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
主なものは以下のような感じでしょうか。
2., 3., 4., 5., 6. は、いずれも時間軸に関する改良です。 4., 5., の geographics は一時期 set *data のオプションでしたが、 今回 set *tics に変更され、それとともに numeric, time も新設されました。
2. は、主にデータ入力用の tics の型と出力用の tics の型が、 gnuplot 内部で分離して処理されるようになったことでしょうか。 4., 5. とももちろん関係します。 従来、は「set xdata time」とすると x 軸は「入力も出力も日時データ」になったのですが、 現在は「入力は日時データ、出力はデフォルトが日時データ」になるだけで、 出力側はその後で「set xtics numeric」とすれば 日時データモードを解除できるようです。
6. は、新しく導入されたもので、 主に負の時間 (1970-01-01 のエポック時以前) 用のもののようです。 ドキュメントには以下のように書かれています:
そして、例えば秒数が -3672.50 の場合、それぞれ以下のようになる、 と記されています。
いまひとつ使い道はわかりませんが、多少凝った処理をしているようです。
7. は wxt terminal のツールバーの改良です。以下にサンプルを示します (Solaris での wxt terminal 出力):
このツールバーのアイコンは、左から、
「Copy plot to clipboard」 「Export plot to file」 (縦線) 「Replot」 「Toggle grid」 「Apply the previous zoom settings」 「Apply the next zoom settings」 「Apply autoscale」 (縦線) 「Open configuration dialog」 「Open help dialog」を意味しているようです。 「Export plot to file」では、出力ファイル形式を PNG か PDF か SVG かを選択できるようになっています。 また、「Open configuration dialog」を選択すると 以下のようなダイアログウィンドウが立ち上がります。
8. は、以下のような感じのようです。
plot sample [a=0:360:10] '+' using (3+sin(a)):(cos(a)) with points
0:360 までが範囲で、最後の 10 が標本間隔を意味します。
例えば、以下のような感じです。
set angle degrees
plot sample [a=0:360] '+' using (a):(sin(a)) w lp,\
[a=0:360:10] '+' using (a):(sin(a)+0.5) w lp,\
[a=0:360:20] '+' using (a):(sin(a)+1.0) w lp
複数のグラフで '+' のサンプリングを変える、 というのは、with point などではもしかしたら便利かもしれません。
(cf. 「情報やメモ (01/26 2015)」)
11/12 頃に 5.0.rc3 がリリースされました。 これが最後の RC 版らしく、 いよいよ 5.0 正式リリース版が登場することになりそうです。 5.0.rc2 からの変更です。
意外に、RC3 の段階でも新規の機能がいくつか追加されています。
(cf. 「情報やメモ (01/06 2015)」)
09/22 ころに gnuplot-4.6.6 がリリースされました。 配布物に含まれる NEWS には、以下のように書かれています。
基本的に 4.6.5 の修正が主ですが、 多少新規機能も取り入れられています。 これが 4 系列の最後の版になる予定だそうです。
前回の報告 (06/13 2014)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
前回の報告から 3 ヶ月も経ってしまいましたので、 だいぶたまっていますが、 ここで報告しているもののほとんどは 5.0rc1, 5.0rc2 へもマージされていますので、 次期正式版である 5.0 にも実装されると思います。
5.0rc1, 5.0rc2 へのかけこみ実装もかなりあるようですが、 めぼしいものは以下のような感じでしょうか。
1. は、例えば call のパラメータとして、3.5 のような直接の数字でなくても、
a = 3.2
b = -4.3
call "sub.gp" (a+b) (a-b)
のような数式を「かっこで囲めば」指定できるようになった、
ということです。この場合、sub.gp 内部では、
ARG1 は (文字列として) -1.1 という値、ARG2 は 7.5 という値になります。
この場合、もちろん (a+b)
を
"(a+b)"
とすると
ARG1 が「(a+b)」という文字列になりますが、
しかしそれも sub.gp 内で @ARG1 として展開するように使えば、
正しく -1.1 を表してはくれます。
このマクロ置換は、従来も使えていましたが、
それが今回マクロ置換によらずに数式で値を指定できるようになった、
ということのようです。
2. は、exit error 'message'
を入れたところで疑似プログラムエラーとなり、
'message' をエラーメッセージとして出力した後、
対話型 terminal ではすべてのループ、call などを中断して
コマンドラインに戻ります
(非対話型 terminal ではプログラムを終了)。
デバッグなどに使えるんでしょうか。
3. は、今まで lmargin, rmargin, tmargin, bmargin と 4 つの set を行っていたものを、簡単に一つにするものです。 もちろん従来の set lmargin 等も残されています。
4. は、すでに 「情報やメモ (07/24 2014)」 で報告ずみです。
5. は、テキストの matrix データが列ラベルや行ラベルを持つ場合に、 それをスキップするためのキーワードです。 ヘルプには以下のような例が載っています:
$DATA << EOD
xxx A B C D
aa z11 z12 z13 z14
bb z21 z22 z23 z24
cc z31 z32 z33 z34
EOD
plot $DATA matrix columnheaders rowheaders with image
ここで、zXY は具体的な数値を意味していて、
A, B, C が columnheaders、
aa, bb, cc が rowheaders になります。
なお、これを読み込んで使用する、ということはできないようです。
6. は、矢軸を点線/破線指定した場合に 矢先の境界線まで点線/破線にならないように、ということでしょう。
7. は、現在はデータの先頭行に書いた名前 (columnhead) を using 指定に使えるようになっていますが、 fit の場合にそれを使うと問題が起こる場合があった、 ということのようです。
8. は、(平方和)/N の平方根である標本標準偏差は STATS_stddev でありましたが、 今回 (平方和)/(N-1) の平方根である不偏標準偏差を STATS_ssd として追加した、ということです。
9. は、linecolor や fillcolor などに色名を指定する場合、
従来は「linecolor rgb "red"
」のように
'rgb' というキーワードが必要でしたが、それが不要になったということで、
「linecolor "red"
」のように
直接色名を指定できるようになっています。
10. は、word(), words() で指定する文字列引数の文字列内に、 引用符を入れた文字列が指定できるようになった、ということです。 ヘルプには以下のような例が載っています:
print words("\"double quotes\" or 'single quotes'") # 3
これが 3 になるのは、「"double quotes"」が
引用符で囲まれているため一つと数えられ 1 つ目の単語となり、
「or」が 2 つ目の単語で、「'single quotes'」が 3 つ目の単語となる、
ということです。" は " 内では \ でエスケープする必要があります。
ただし、少し特殊なルールがあり、文字列内の開始引用符の前は、 スペースか文字列の先頭でなければいけない、となっています。 逆に言えば、そうでない引用符は引用符の開始であるとはみなされない、 ということです。ヘルプには以下のような例が載っています:
print words("Alexis' phone doesn't work") # 4
これは、Alexis の後の ' も、doesn't の ' も、
上のルールにより引用符とはみなされず、
文字列の一部 (アポストロフィー) であると認識されます。
確かに欧文では必要なルールかもしれません。
11. は、現在多くの対話型 terminal がサポートする、
key エントリの上でマウス左クリックにより特定のグラフの表示を
ON/OFF する機能を、コマンドとして実装したものです。
グラフの番号、グラフタイトルなどを指定して実行することが可能ですが、
「toggle "ti*"
」のようにすると
ti で始まるタイトルを持つ最初のグラフが対象となる、
という仕組みも持っているようです。
プレゼンなどでは使えるかもしれません。
12. は、fit の noerrors を unitweights に変えてそれをデフォルトにしています。 よって、今まで noerrors をつけていたものが不要になります。 ただし、この辺りの書式が多少以前のものとは変わってきているため、 今回 set fit のオプションとして v4 (version 4 互換), v5 (version 5 互換) のようなものも追加されました。 なんとなく一時的なもののような気がしますが、 移行期には必要かもしれません。
先日 (08/28) gnuplot-5.0.rc2 が公開されました。 5.0.rc1, 5.0.rc2 が 4.6.5 に比べてどのような機能を持っているかは、 NEWS というファイルに書かれています。以下にその訳を紹介します。
まずは 5.0.rc1 (gnuplot 5.0 での新しい機能、変更、修正) です。
「新規」が 50 個、「変更」が 27 個、「修正」が 1 個と、 さすがに「新規」がかなりあります。
次は 5.0.rc2 (5.0.rc1 からの変更) です。
こちらは rc1 からの修正が主ですから、 「新規」は 6 個、「変更」は 5 個、「修正」が 13 個となっています。
5.0 の正式リリースは、9 月と予定されていましたが、 rc2 は 1 月ほど予定が遅れましたので、10 月位になるでしょうか。
(cf. 「情報やメモ (01/06 2015)」)
「情報やメモ (08/07 2014)」 で紹介した、 x11 terminal でフォントが見つからない場合用のパッチですが、 めでたく本家に採用されたようです。 よって、多分今後の CVS 版と 5.0rc2 位からはこの問題は解消されると思います。
「情報やメモ (07/25)」, 「情報やメモ (07/30 2014)」 等にあげた 2 つの問題について、 パッチを書いてみましたのでここで紹介しておきます。
まずは、「情報やメモ (07/25)」 の軸のラベルが変だという問題ですが、 これは元々、軸の目盛の値に対して その範囲が狭すぎる場合に対する「対処」が原因です。
例えば、[1:1+2e-2]、すなわち 1.00≦x≦1.02 という範囲の場合、 目盛のラベルは
1, 1.005, 1.01, 1.015, 1.02になりますが、[1:1+2e-6]、すなわち 1.000000≦x≦1.000002 という範囲の場合、 本来の目盛は
1, 1.0000005, 1.000001, 1.0000015, 1.000002なのですが、tic format のデフォルトの「%g」(CVS 版では「%h」) で出力すると、有効数字桁がデフォルト幅を越えているので、 短い有効数字幅で四捨五入され、0 で終わる小数部分も省略されるので、 すべてのラベルが「1」になってしまいます。
その問題への「対処」として、 軸の範囲指定が狭くて、かつその軸の set format が指定されていない場合は、 その最後の桁が出力できる精度の「%.[n]f」を ラベルに強制的に適用するようになっていました。 しかも、小数部分の表示幅 [n] は、範囲幅 (上の例だと 2e-6) と同じ精度に設定されるので、 上の目盛ラベルの 2 つ目と 4 つ目の小数 7 桁目は四捨五入されてしまい、
1, 1.000001, 1.000001, 1.000002, 1.000002のようになります (これはまあある意味で仕方ないかと思います)。
しかし、最上位桁が 0、すなわち目盛ラベルの有効数字が 2 桁くらいしかない場合でも同じ「対処」が利用されてしまっていたのが 「情報やメモ (07/25)」 の問題です。 実は、[1e-6:3e-6] のような場合であっても ほぼ範囲指定幅だけを見て同じ挙動が取られていました。 ただ、「(範囲の最小値)×(最大値)>0」の場合にだけやる、 という対処が gnuplot-4.6.1 で入っていて、 それで 4.6.1 からは [0:2e-6] の場合には この問題が起きないようになっていました。
作成したパッチ (src/axis.c へのパッチ) は、 多少場当たり的ですが、 範囲の最小値か最大値の絶対値が 1 以上である場合、 すなわち整数部分が 0 でない場合にこれをやるようにしてみました。 これにより、[1e-6:3e-6] や [0:2e-6] はいずれも 「%g」(CVS 版では「%h」) が利用されることになります。
もちろん、[0.1:0.1+2e-7] のような場合は どうするかという問題はありますが、 これは、実は x 軸か y 軸かでも違う問題がありますし (x 軸だと長い桁のラベルは重なってしまう)、 「1」と「1.0001」が同居するよりは「1.0000」と「1.0001」とすべきでは、 などの問題もありますから、 よほど気になる人は結局自前で set format や set xtics などで書式指定、回転指定などを手動で行うべきでしょうから、 デフォルトの対処としては、とりあえずこの程度が適当かなと感じています。
次に、 「情報やメモ (07/25 2014)」, 「情報やメモ (07/28 2014)」, 「情報やメモ (07/30 2014)」 に上げた、x11 terminal でフォントが見つからない場合に 連続描画が遅くなる問題の件ですが、 これは現象や理由は 「情報やメモ (07/30 2014)」 で報告した通りで、それを改善するため、 検索済みのものをリストに残している部分に、 マルチバイトフォント (XFontSet) も便乗して残すパッチ (src/gplt_x11.c へのパッチ) を書いてみました。
とりあえず手元では、問題は解消しているようです。 両者ともに本家には投稿ずみですが、 次の 5.0 に採用されるかどうかはまだ未定です。
なお、予定では、5.0.rc2 が 7 月、 5.0 正式版のリリースは 9 月のようでしたが、 若干遅れているようで、 8 月に入りましたが rc2 はまだ出てないようです。
(cf. 「情報やメモ (08/18 2014)」)
「情報やメモ (07/25 2014)」, 「情報やメモ (07/28 2014)」 に書いた、
「gnuplot-4.6.X では x11 terminal でフォントが見つからない場合、遅くなっているのかも」の件ですが、CVS 版の gnuplot で試してみたら 英文フォントの場合はフォントが見つからなくても速く動作しました。 しかし、和文フォント (mbfont:) の場合はフォントが見つからないと 遅いままです。
そこで調べてみたところ、gnuplot_x11 ドライバに、 英文フォントの検索に関しては、 以前の検索をリストにして残している改良が入っていることがわかりました (2012 12/25 頃)。 しかし和文フォント (mbfont:) には 残念ながらそういう仕組みが用意されていないため、 mbfont: でフォントが見つからないときは遅いままになっています。
時間のあるときにその辺りの改良を考えてみたいと思います。 よって、とりあえず現在の CVS 版 (多分 5.0rc1 も) では、
ということになっていますので、 mbfont: を使う場合は正しいフォントを設定してみてください。
なお、上の CVS 版への修正は、 時期からすれば gnuplot-4.6.2 の公開前なのですが、 4.6.X 系列には取り入れられていません。 よって、4.6.X 系列では英文フォントでも和文フォントでも、 フォントが見つからない場合は動作が遅くなります。
(cf. 「情報やメモ (08/07 2014)」)
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
smooth csplines によるスプライン補間の近似式はわからないのか、 という質問がありました (345)。
それに対して、ヘルプを読む限り近似式を求める方法はない、 計算は難しくないから自力で係数を決めたら、 近似曲線を使いたいならスプライン補間ではなく fit を使うべきでは、 といった回答がありました。
ほぼ回答の通りだと思いますが、少し補足します。 cspline による 3 次スプライン補間は「1 本の数式」による補間ではなく、 区間毎に異なる数式 (3 次式) を利用した補間です。 よって、例えば 100 個のデータ点があれば、 各隣接点の間をそれぞれ別な 3 次式で近似するので、 合計 99 本の 3 次式 (係数は 4 x 99 = 396 個) による近似になります。
その係数は、すべてのデータ点から連立方程式によって求めるので、 確かによほど点の数が少なくない限り手計算で求めることは難しいでしょうが、 その係数すべてがわかっても、 「データの近似式を得た」という感じではないと思います。 近似式としては折れ線 (1 次式) でつないだものを 「見た目の角を取って丸くした」といった程度の意味しかありません。 むしろ「近似式」という意味では、1 本の数式で近似する fit (非線形最小自乗法) を使うべきでしょうし、 「近似式」という意味ではスプラインより折れ線近似 (線形補間) の方が より自然かもしれません。
しかし、例えば「科学的な実験のデータ」とは異なる、 例えばデザインなどの分野で純粋に滑らかな曲線の数式が欲しい、 という目的であれば話は別だと思います。 実際に、スケーラブルフォントのデザインでは スプラインやベジェといった補間曲線が良く利用されています。 ただ、gnuplot 自体は、その係数や数式を内部には持つものの、 それを外部には出力しませんので、 回答にも上がっていましたが、 そういう計算が行える Octave や SciLab のような数式処理ソフトを 利用して係数を計算させるのがいいだろうと思います。 もちろん、gnuplot はオープンソースですから、 ソース (src/interpol.c) を改変すれば、 係数を出力させることも不可能ではありません。
pdfcairo terminal でイタリックフォントは使えますか、 という質問がありました (355)。
「使える」だけの回答がありましたが、 cairo は fontconfig ベースなので、 どうやったらイタリック指定できるのかわからない、 ということかもしれません。 fontconfig だと、指定したフォントが見つからないと 代用フォントが使われてしまうので、 うまく指定しないと「使えない」と見えてしまうのかもしれません。 実はわたしもよくはわかっていないのですが、 例えば以下のような感じで使えるようです。
フォント名の空白を - に変える必要はないかもしれませんが、 enhanced モードでのフォント指定などでは問題も起きますので、 空白は - に変えるといいでしょう。 多分 fontconfig ならあまり違いはないと思います。 実際、fc-list で「Courier New:style=Italic」という行があったので、 ついでに「Courier New:style=Bold Italic」も利用する形で
set term pdfcairo font "Courier-New-Italic,20"
set title "SIN(X)"
font "Courier-New-Bold-Italic,30"
...
のように指定して PDF ファイルを出力させて、
その PDF ファイルのフォントを調べたら「CourierNewItalic」と
「CourierNewBoldItalic」が使われていることが
確認できました (gnuplot-4.6.5)。
なお、このイタリック (斜体) やボールド (太字) 指定は、 新しい 5.0 (および現在の CVS 版) では、フォント名の最後に 「:Italic」「:Bold」「:Bold:Italic」 のように追加する形式になっています:
set term pdfcairo font "Courier-New:Italic,20"
set title "SIN(X)"
font "Courier-New:Bold:Italic,30"
...
マニュアルでは、enhanced モードでの使用例のみあげてありますが、
通常のフォント指定も上のようにできるようです
(4.6.X 系列では不可)。
現在のフォントの Italic, Bold
等の属性のみを変更したい場合には便利でしょう。
' と " はどう使い分けていますか、という質問がありました (359)。
回答はありませんでしたが、基本的にはオンラインヘルプの 「help quotes」に書かれている通りで、 \ による特殊文字表現や、文字列内のコマンド置換 (`` による置換) を使いたければ " で囲みます。 " 内で \ を使いたい場合は \\ としなければいけません。
私はさらに gnuplot スクリプトをシェルスクリプトのヒアドキュメントとして 書くことが多いので、 その場合にシェルスクリプトの変数の置換を行わせるか行わせないかで ' と " を使い分けることが多いです。 また、Unix だとパスの区切りは \ ではなく / なので、 その点では MS-Windows よりは ' と " の区別の必要は少なくて済むかもしれません。
なお、「情報やメモ (07/25 2014)」 に書いた x11 terminal に対する -noevents オプションが ハングアップする件ですが、 本家に報告したところ、それはバグではなく 現在のマニュアルが紛らわしいだけだ、という回答がありました。 -noevents は gnuplot 本体ではなく、 gnuplot_x11 という X11 描画ドライバに渡されるオプションだそうですが、 それを指定すると親プロセスへの情報の送信を行わなくなるので、 ハングアップしてしまうのだそうです。
よって、これはむしろ x11 terminal で使用するものではなく、 xlib terminal で X11 描画ドライバ用の出力を作成し、 その後 gnuplot_x11 を単独で起動して その出力を食わせるときに使うもののようです。 そんな使い方だとは初めて知りました。
ところで、x11 の描画が遅い件を、 とりあえずその -noevents で試してみましたが、 やはり -noevents ありでもなしでも遅いことに変わりはありませんでした。 となると、原因はフォント指定にありそうです。 フォントが見つからない場合、 デフォルトのフォントを使用するに至るまで、 何段階かのフォントの再検索を行っているのですが、 それが各 plot コマンド毎に行われてしまって 遅くなっているのかもしれません。 時間があるときにでも調べてみたいと思います。
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
Cygwin のアップデートをしたら、 gnuplot でフォントに問題が起きるようになった、 という報告がありました (319)。
png terminal と pngcairo terminal に関する報告があがっていましたが、 いずれも表示されるエラーメッセージからすると fontconfig 関係のエラーのようです。
png terminal は gdlib (libgd) というライブラリを使用しますが、 最近の gdlib はフォントの検索やレンダリングに freetype ライブラリの他に fontconfig ライブラリも使えるようになっています。
pngcairo terminal は、フォントのレンダリングには pango というライブラリを使用しますが、 これも下請けとして freetype ライブラリ、 fontconfig ライブラリを使えるようになっています。
png terminal の方では、通常は fontconfig に関する警告がでて、 ドットのような文字が出るが、 GDFONTPATH を設定すると TrueType で表示される、と報告されていましたが、 png terminal は、ドット形式のフォントを 5 種類持っていて、 TrueType フォントが見つからなければそれを使用します。 set term png のオプションにある tiny, small, medium, large, giant というのがその内蔵ドットフォントです。 逆にそれが使われたということは、 デフォルトフォント (通常は arial) が見つからなかった、 ということを意味しますから、 fontconfig の警告が出ていることからも fontconfig 関係の設定の問題だろうと想像できます。
pngcairo の方も、fontconfig 関係のエラー (PangoRenderFc がフォントを見つけられない) が出ているので、 やはりこれも fontconfig の設定の問題だろうと思います。 ちなみに、GDFONTPATH を設定してもだめだったと書いてありましたが、 回答もある通り、GDFONTPATH は gdlib 用の設定なので pngcairo とは関係ありません。
Cygwin は知らないので想像ですが、 多分アップデートによって fontconfig の設定 (かキャッシュ) が現状と合わなくなったための 問題だろうと思います。そういう場合は、一般的には fontconfig の設定ファイル (fonts.conf) を確認し、fc-cache を実行すれば戻るのではないかと思います。
gnuplot-5.0rc1 で、軸の始点が 0 でないときの軸のラベルが変だ、 という報告がありました (325)。 [0:2e-6] だと、軸の刻みは 0, 5e-7, 1e-6, 1.5e-6, 2e-6 なのに、 [1e-6:3e-6] だと、刻みは 0.000001, 0.000002, 0.000002, 0.000003, 0.000003 になってしまう、ということでした。
調べてみると、これは、5.0rc1 というよりも gnuplot-4.6 の問題のようです。いくつかのバージョンで調べてみました。 なお、5.0rc1 は確認していませんが、多分現在の CVS 版か、 4.6.1 以降のものと同じではないかと思います。
多分上の (3), (4) はバグではないかと思います。 気づきませんでしたが、4.6 でバグが入りこんで、 ずっとそれが残っているのではないかと思いますので、 あとで本家の方に報告しておきたいと思います。
なお、上に書いたように tics の表記は「e-06」のようなものから 「x10-6」のようなものに最近変わりました。 次の 5.0 ではこれがデフォルトになる予定です。
4.6 にしたらタブ補完の後にスペースがつく、 および描画にかなり時間がかかるようになった、という報告がありました (331)。
まずタブ補完ですが、 gnuplot 自体が持つコマンドライン編集機能 (builtin-readline) には、 タブ補完が実装されたのは gnuplot-4.6 からで、 それ以前にはなかったと思います。 よって、この話は builtin-readline に関するものではなく、 GNU readline か BSD libedit ライブラリによる タブ補完の話ではないかと想像できます。 GNU readline か BSD libedit の話だとすると、 gnuplot の関知するところではないかもしれません。 なお、うちは GNU readline ですが、 gnuplot-4.6.0 から 4.6.5 まで、 ファイル名補完後にスペースがついたものはありませんでした。 builtin-readline に関しては確認していません。
また、「描画にかなり時間がかかるようになった」の方は、 「アニメーションだとかなり遅い」と書かれてあり、 後で terminal は x11 を使用しているという情報がありましたが、 x11 terminal での「アニメーション」というと、 スクリプトなどから連続して plot したときに画面のグラフが自然に切り替わる、 ということではないかと思います。 少し手元で gnuplot-4.2 から 4.6.5 くらいまでの x11 terminal で試してみました。 すると、4.6 で変わったというよりも、 むしろ 4.2.6 から 4.4.0 のところで急に遅くなっていて、 それ以後はほとんど変化はないことがわかりました。 ということは、元記事の方は 4.4 から 4.6 へ移行したのではなく、 4.2 から 4.6 へ移行したために遅くなった、 ということなのかと予想されます。
4.2.6 と 4.4.0 で変わったところを見てみると、 カラーマップとイベント処理あたりなのですが、 gnuplot に -mono オプションをつけて実行しても 4.4.0 はそれほど速くはなりません。 ではイベント処理の方かと思って、 gnuplot に -noevents オプションをつけて実行してみたのですが、 今度は gnuplot の x11 terminal 自体がハングアップしてしまいました。 -noevents は、いくつかのバージョンで試してみましたが、 いずれも x11 のグラフウィンドウを開いた後にハングアップしてしまいます。 これ自体多分バグだと思いますので、あとで本家に報告しておきます。 もし、イベント処理に時間がかかっているのだとすれば、 本来なら -noevents をつけて実行すれば速くなる可能性があるのですが、 残念ながら現状ではそれが原因なのかは確認できません。
なお、元記事の方は、解像度が上がってるようにも見える、 と書いているようですが、 4.4.0 以降の x11 terminal で解像度を上げる処理などが 実装されたということは、多分ないように思います。 実際画面で確認しても解像度が上がっているようには見えません。
しかし、これとは別に一つ気がついたこともあります。 どうも、X のフォントの設定に失敗した場合は遅くなるようです。 X11 のフォントの設定に失敗すると、x11 terminal の起動時、 あるいはコマンドラインに
gnuplot_x11: Some character sets not availableのようなメッセージがでることがあります。 特に日本語フォント (mbfont:) の設定がうまくいかないときにこれが出ます。 その場合に、
set term x11 font 'fixed'
のようにして実行すると速い動作をします。
mbfont: が常に悪い、というわけではなく、
mbfont: でも上の警告メッセージが出ないように正しくフォントを設定すると
ちゃんと速く動作するようです。
上に書いた 4.2.X と 4.4.X の違いも、
もしかするとこのフォント回りの部分に原因があるのかもしれません
(未確認)。
(cf. 「情報やメモ (07/28 2014)」, 「情報やメモ (07/30 2014)」, 「情報やメモ (08/07 2014)」, 「情報やメモ (03/31 2015)」)
「情報やメモ (07/22 2014)」 に書いた、Wheel スクロールによる y 軸方向のズームですが、 そこに書いたように Ctrl + Wheel スクロールによるズームの 単位の設定を実装するパッチを作って本家に送ったら、 めでたく採用されたようです (5.0rc2)。 これは以下のように利用します:
set mouse zoomfactors XX, YY
XX, YY として x 方向, y 方向のズーム因子を設定します (0 以上の実数)。
デフォルトはいずれも 1.0
(i.e. 1 回の拡大/縮小率 = 1.25/0.80 倍) です。
例えばこれらを設定すると以下のようになります:
set mouse zoomfactors 2, 2 → 速い (粗い) ズーム
set mouse zoomfactors 0.2, 0.2 → 遅い (繊細な) ズーム
set mouse zoomfactors 1, 0 → x 方向のみのズーム
set mouse zoomfactors 0, 1 → y 方向のみのズーム
このように指定した P = XX, YY の値は、
スクロールによる一回の拡大/縮小率に反映し、
実際には、以下のようになります:
よって、P = 2 は 1.252 = 1.56 倍, 0.82 = 0.64 倍 (速くて粗いズーム) を意味し、 P = 0.2 は 1.250.2 = 1.05 倍, 0.80.2 = 0.96 倍 (遅くて詳細なズーム) を意味します。 P = 0 は、 1.250 = 1 倍, 0.80 = 1 倍なので、 拡大縮小をしません。
なお、これは「Ctrl + Wheel スクロール」 によるズームにしか影響しません。
(cf. 「情報やメモ (09/22 2014)」)
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
0 のデータをグラフで非表示にするには、 という質問がありました (293)。
解として、
f(x) = (x == 0) ? 1/0 : x
plot "data" using 0:(f($1))
のようなものが紹介されていましたが、
これは、0 のデータは「無効値」とする、ということになります。
現在 (4.4 以降) の gnuplot では、
1/0 の代わりに NaN を使うこともできます。
なお、回答者は「1/0」でなく「0/0」と書いていましたが、
それでも確かに無効値にはなりますが、
数学屋としては「0/0」は少し避けたいところです。
また、元記事には「0:f($1)
」と書かれていましたが、
これは「0:(f($1))
」(かっこあり) の誤植でしょう。
なお、質問者の「非表示」の意味によっては 上では不十分かもしれません。 データ中に 1/0 や NaN のような無効値があると、 with lines などではグラフがそこで一旦切れます。 しかし、グラフを切らずに、そのデータを飛ばして線でつなぎたい、 という場合には、そこは「欠損データ」とするか、 データを完全に取り除く必要があります。
しかし、現在の gnuplot の using フィルタリングでは、 そこを欠損データとすることも、取り除くことも難しいようです。 set datafile missing を利用してもうまくいきませんが、 もし何かご存知でしたら教えてください。 とりあえずは、awk などを使って
plot '< gawk "$2 != 0" data' using 0:1 with lp
のようにして 2 列目が 0 のデータを除いてしまうことでしょうか。
なお、内と外の引用符は OS によって適切なものを選んでください。
「$2
」も場合によっては
\
などによるエスケープが必要かもしれません。
立ち上げる時のウィンドウサイズを変えたい、 という質問がありました (296)。
ターミナルの種類がわからないと返答できない、とありましたが、 もしかすると「ターミナルの種類」ではなく、 「起動時の対話型ウィンドウ」のことかもしれません。
Unix の場合は、kterm などで gnuplot とすると、 その kterm 内で CUI のものが起動します (MS-Windows の場合の gnuplot.exe もほぼ同様) が、 MS-Windows の wgnuplot の場合は コマンド入力用のウィンドウが立ち上がります。 「立ち上げるときのウィンドウサイズ」はそれを指しているかもしれません。 これであれば、多分以下のようにやればサイズの変更は可能です。
TextSize=
」の後ろの数字を変更する
(横幅、縦幅)
wgnuplot.ini には他の設定 (ウィンドウの初期位置等) もありますが、
もし変になったらその wgnuplot.ini を一旦消してしまえば
デフォルトの値で起動すると思います。
gnuplot の「help wgnuplot.ini
」
にも説明があります。
この wgnuplot のウィンドウサイズではなく、
グラフウィンドウのサイズのことだとすれば、
現在はたいていは「set term [型] size [XX], [YY]
」
という形式で set term
で設定します。
あるグラフを xrange [0:1] で描画するとして、 [0:0.5] は破線、[0.5:1] は実線で描くにはどうしたらいいですか、 という質問がありました (303)。
これに対して、場合分けと無効値 (1/0 等) でグラフを切るような解が紹介されていました。 上でも書いたように、無効値は NaN と書くこともできますが、 別な解として、 「情報やメモ (12/21 2012)」, 「情報やメモ (01/22 2013)」 でも紹介した部分範囲指定を用いる方法もあります (要 CVS 版, 5.0rc1 等)。 また、破線、実線も現在の CVS 版 (5.0rc1 等) では set dashtype が実装され、 破線パターンなどのカスタマイズが容易にできるようになっています。
またこれと関連して、1/0 と 3 項演算子による場合分けのような 裏コマンド的な物はどこに載ってますか、 普通の書籍にはほとんど載ってませんが、 という意見がありました (305)。
確かに、1/0 などという他では見ないものも使いますし、
3 項演算子による場合分け関数定義も独特なので、
「裏コマンド」と見えるかもしれません。
しかし、以前の gnuplot 本にはあまり書いてなかったかもしれませんが、
山本さんの
「gnuplot の精義」 などには書いてありますし、
そもそもかなり以前 (gnuplot-3.7 位) から
gnuplot のオンラインマニュアル (help ternary
) や
付属の FAQ などに、
この 1/0 と 3 項演算子を用いた場合分け関数の例が書いてあります。
だから、gnuplot では「裏コマンド」ではなく、
標準的な用法の一つといっていいでしょう。
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
EMF terminal の fill は solid 系の塗り潰しなんだけど、 ps のような pattern の塗り潰し (網掛け) はできないか、 という質問がありました (261)。
これは、既に以下で報告した通り、現在の CVS 版では実装されています。
LibreOffice でうまく表示されないなど一部問題もあるようなのですが、 win terminal の EMF 出力と同じものが実装されているので、 とりあえずはこれ以上は仕方ないという感じでしょうか。
また、関連して emf terminal に関する他の問題も上げられていましたが (269)、それらもすでに上のページに書いてある通り CVS 版では修正済みです。
グラフウィンドウ上で、Ctrl + Wheel スクロールで x, y 両軸のズーム、 Shift + Ctrl + Wheel スクロールで x 軸のズームになっているけど、 y 軸のみのズームは、という質問がありました (278)。
残念ながら現在は y 軸のみのズームはなぜかありません。 割り当てられていないというだけでなく、 y 軸のみのズームを行う関数がそもそも用意されていません。 作成者が必要としていなかった、ということでしょうか。
もし実装するとすると、例えば Alt (Meta) キーを利用するか、 または Ctrl + Wheel スクロールによるズームの単位を x, y 軸毎に設定できるようにするか、でしょうか。 Alt キーの検出も用意されているようですので、 いずれの実装もそれほど難しくはなさそうに思います。
gnuplot の補完があまり賢くない、という記事がありました (290)。 普段使用している zsh, ipython に比べて、とありましたので、 Linux ユーザでしょうか。
rlwrap を噛ませたら、という回答もあったようですが、 現在は gnuplot のコマンドライン編集機能は、コンパイル時に
の 4 通りから選べるようになっています。 MS-Windows 版バイナリは多分 gnuplot 自体が持っているものを 使っていると思います。 特に BSD editline はよく知りませんが、 GNU readline を選ぶと多少はましなのかもしれません。
なお、関連して、ヒストリに関しても少し言及がありましたが、 gnuplot 自体のヒストリ機能については少し手が入り、 現在は CVS 版で「set history」というものが新設されています (cf. 「情報やメモ (12/27 2013)」)。
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
ここには、ときおり gnuplot+ に関する熱い思い (?) が投稿されていて、 議論になっていることも多いようです。 例えば 152, 181-186, 211-226, 228-261 あたりもそういった内容です。
ただ、今回あらためてその議論を見直して 認識を新たにしたことが一つありました。 228 付近の記事を見て思ったのですが、 もしかして gnuplot+ を使う目的として、
「LaTeX は使わないけど、数式が綺麗にラベルに書いた EPS が欲しい」ということがあるかも、と思いました。
そうやって作った EPS をその後別なソフトに取り込むのだと思いますが、 私は基本的に EPS は LaTeX でしか使いませんので、 「数式をラベルに書く」場合は、 「情報やメモ (08/12 2013)」 に書いたように むしろ psfrag を使って LaTeX 側で変換しています。 epslatex terminal もあるから、 その点では現在 gnuplot+ の機能は gnuplot (+ LaTeX) で足りてるよね、 と思っていたのですが、 LaTeX を使わない人にとってはそうではない、 ということに全く気がついていませんでした。
LaTeX がない環境でも、LaTeX のような数式記号を使って 綺麗な数式がラベルに書けるのは、 確かにそれなりに意味があるかもしれません。 現在の gnuplot に取り入れる価値もありそうな気がします。 ただし、現在の postscript terminal へのオプションという形式は、 postscript terminal への追加、変更が大きく、 本家には受け入れられにくそうな気がするので、 やるなら新しい terminal かなとも思います。 検討する意味はありそうです。
なお、山賀さんの plus パッチは 3.7.X まででしたが、 その後開発版 (3.8) に対する plus の移植を しばらく尾田さんがやっておられて、 その後 Vine Linux で一時期 4.0.0 に plus パッチを当てたパッケージがあったように聞いたことがあります。 その辺が意外に使えるかもしれません。
gnuplot の EPS 出力を pstoedit 等で EMF に変換する際、 フォントの変換がうまくいかない、という記事がありました (187)。
EPS 出力をするところで、
set xlabel font "Times New Roman Bold Italic,20"
set xlabel "x {/Times-Roman [mm]}"
のようにやっていて、
質問者は後に作成した PostScript ファイルのフォント部分を
強引に書き換えるバッチファイル (192) を利用して回避したようですが、
上のような「スペースの入った PostScript ファイル名を指定」したコードは
多分問題があると思います。
gnuplot は、指定されたフォント名を何も疑わずにそれを PostScript フォント名として PostScript ファイルに書き出します。 上のように実行すると実際
[ [(Time New Roman Bold Italic) 200.0 0.0 true true 0 (x )]
[(Times-Roman) 200.0 0.0 true true 0 ([mm])]
のように EPS ファイルに書き込まれますが、問題はこの後です。
上のように「スペースの入った」PostScript フォント名を解釈するのは、
gnuplot ではなく次のプログラムの役割です。
多分実際には ghostscript、pstoedit
あたりが解釈することになると思いますが、
どちらも多分失敗するでしょう。
つまり、gnuplot では、「PostScript フォントの解釈」
は一切やらないので、その次のプログラムが
正しく解釈できるフォント名を指定することが原則です。
ちなみに、うちの ghostscript の設定を見ると、 Times New Roman の Bold Italic フォント、 Times-Roman のフォント名は、それぞれ TimesNewRoman-BoldItalic (実際には Times-BoldItalic が使われる) と Times-Roman となっていて、フォント名にスペースは入りません。 実際、上の EPS ファイルを ghostscript に処理させると、 「Times New Roman Bold Italic」フォントには代用フォント (たまたま Times-BoldItalic) が使われているようです。 元記事の方は、むしろ Times-Roman の方のフォントの変換に問題が、 と書いておられるようですが、それは ghostscript か pstoedit の設定の問題だと思います。
ちなみに、pstoedit は、-fontmap オプションで フォントマップが指定できますから、 むしろこちらでフォント名を書き換えるのでしょう。 例えば、デフォルトの wemf.fmp には
"Times-Roman" " Times New Roman"
"Times-Bold" " Times New Roman:Bold"
のようなエントリが入っています。
これらを参考に適切なフォントマップを作ればいいんだろうと思います。
なお、関連して、EMF terminal の問題なども上げられていましたが、 それらについては既に以下で紹介、修正済みです
gnuplot-4.6.4 では、CVS 版の機能として紹介されてた 名前付きデータブロックの機能は入ってないのか、 という記事がありました (205)。
gnuplot では、パッチレベルの更新 (4.6.3 の「3」とか) では バグの修正が大半で、 その間に作られた新しい機能は入らないことが多いです。 他の機能との整合性の問題もあるのだろうと思います。
なお「名前付きデータブロック」(インランデータブロックとも言う) は、 5.0 で登場します (rc1 には入ってます)。
x11 terminal でシンボルフォントを使うには、という質問がありました (207)。 enhanced で「{/Symbol}」は PostScript 以外では使えない、 とういことでした。
ちなみに、その「{/Symbol}」を実行したときに出たというエラーメッセージは、 gd ドライバのメッセージ (gif/png/jpeg terminal) のようでしたが、 gd ドライバなら、適切なフォントを指定すれば Symbol も使えます。 gd ドライバが fontconfig 対応になっているか、なっていないかで フォント指定が違いますが、なっていなければ TrueType フォント名を、 なっていれば fontconfig が探せる Symbol フォント名を指定すればいいです。 MS-Windows なら、symbol.ttf がついていますし、 OpenOffice や Acrobat Reader, ghostscript などにも TrueType フォントや Type 1 フォントの形式でついていますので、それらを利用できます。 そういう話が、以下に多少書いてあります。
さて、X11 の話ですが、Linux では symbol.ttf 用のパッケージがあり、 {/symbol} で x11 enhanced でも表示された、という回答がありました。 うちの FreeBSD 上では、{/symbol} でも {/Symbol} でも シンボルフォントが表示されました。=20 をつけて拡大もできます。 一応うちには -adbe-symbol-medium-r-normal-... ってのが入ってるみたいです。
2 ちゃんねるの掲示板「gnuplot を使おう。その 3」(アドレスは リンクリスト 参照) に書かれた情報について、 多少気になるものがありましたので、 少し書いておきます。
なお、最近忙しくて、こちらに関してはしばらく書いてませんでしたが (よってかなり古い)、 まあ少しずつ書いていこうかと思います (だから今回も少しだけ)。
C 言語からパイプで gnuplot でグラフを書かせようとしているけど うまくいかない、という質問がありました (167)。
手動ならうまくいくんだが、ということでしたが、 どういうプログラムかの提示がなかったので あまりまともな回答がついていなかったようです。
エラーメッセージとして
No usable data in this plot to auto-scale axis rangeと出ると書いてありましたが、 これは、splot を実行した際に入力データが一つもなかったことを意味します。 例えば「splot '-'」でそのまま「e」を入力すると同じメッセージがでます。
All points x value undefined
多分、パイプでのデータ渡しの方法を勘違いしていて、 データが gnuplot にうまく通っていなかったのでしょう。
gnuplot は netCDF のデータはサポートしてないのか、 という質問がありました (172)。
HDF5 の話も書いてありましたが、 現在の CVS 版でもそういうデータ形式のサポートは行われていません。 今のところそれに近そう (?) なのは、 EDF (Europian Data Format) のサポートのみです (http://www.edfplus.info/)。
実のところ、私は EDF も netCDF も HDF5 もよく知りません m(_ _)m
前回の報告 (04/28 2014)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
5.0 公開用の修正がかなりたくさん入っています。 さらに新機能がいくつか駆け込みで追加されているようですが、 これは 5.0 に反映されるのでしょうか。 例えば目新しいものといえば、以下のあたりでしょうか。
「灰色表示」は、x11 terminal では残念ながらあまり綺麗ではないようです。 灰色ですらなく、点々みたいなもので隠している感じです。
linetype cycle は、点種には効いてなかったようで、 しかも線種が少ない場合には、 それより多い点種は使われないことすらあったようです。 それを、例えば linespoints の場合に (線種) * (点種) だけ回るようにした、ということのようです。 ただ、要検討といった感じで (本当は set pointtype cycle が必要、 という文言が見られます) 今後も変更があるかもしれません。
timecolumn(col) から timecolumn(col, "timeformat") への変更は、 軸の time format とは独立に、timeformat を指定しながら timecolumn() を使用するための変更のようです。
あまり余裕がないので詳細なレポートはできませんが、
最近
gnuplot の Q&A 掲示板 上などで、
松岡さん、角藤さんという win 用のバイナリを作っておられるお二方が協力して、
wxt/qt terminal 回りをかなり色々作業しておられます。
今回の更新でも、彼等の作業によるそれらの terminal に関する修正や
コンパイル環境、インストール処理などの修正が少しずつ入っています。
gnuplot は MS-Windows ユーザも多いので (特に日本は)、
そのような貢献はとてもありがたいと思います。
そのような議論の場を提供しておられる松田さんにも感謝です。
(私は最近はマニュアルの誤植の修正程度 (^^;))
(cf. 「情報やメモ (09/22 2014)」)
前回の報告 (03/14 2014)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
前回の報告から 1 ヶ月半位の間ですが、5.0 の公開に向けてか、 かなり色々修正などが入りました。 主要なものは以下のあたりでしょうか。
1. は点線/破線用のオプションですが、 これまではそれは terminal で dashed などと指定した上で、 linetype でしか指定できませんでした。 今回ようやく点線/破線の種類を明示的に指定できるようになり、 linetype 属性である線や点の色 (linecolor)、線種 (dashtype)、 点種 (pointtype) がすべて独立に指定できるようになりました。 dashtype は、数値指定 (実線長、空白長の組の並び) も可能ですし、 . と - と空白の組み合わせによる文字列表現も可能になっています。 set dashtype で点線/破線パターンを登録して、 それを番号参照することも可能です。 マニュアルには以下のような例が載っています。
set dashtype 5 (2,4,2,6)
# 5 番の dashtype を定義または再定義
plot f1(x) dt 5
# その dashtype を使って plot
plot f1(x) dt (2,4,2,6)
# 上と全く同じグラフ
set linetype 5 dt 5
# このパターンを linetype 5 で常に使う
set dashtype 66 "..-"
# 文字列で新しい dashtype を定義
2. は、pt で「pt "C"」のようにできるようにしたものです。 もちろん with labels でも似たようなことはできるのですが、 with linespoints などと同等のことをするには with lines + with labels の 2 度描きしないといけなくて面倒だったのが、そうしなくて済むようです。 demo/dashcolor.dem, demo/lines_arrows.dem には "C", "D" の他に、Unicode (UTF-8) 文字の U-2720 (マルタ十字)、 U-2729 (強調縁取りの白抜きの星)、 U-2732 (中空のアスタリスク)、 U-263A (白丸笑顔) を使ったサンプルが出ています。
なお、いずれも「pi -5」のところが U-263A になっているのですが、 うちの wxt 環境ではその smile の Unicode 文字が うまく表示されていないようです。
7., 11. は、データブロックの適用範囲を拡張したものですが、 従来行われていた set table で一旦テーブルデータを 一時的な外部ファイルに吐き出して、 それを再利用する、という裏技のような作業が、 外部ファイルなしにメモリ上のデータブロック経由でできるようになりました。
13. は、以下の 2 つを見比べると、 例えば Bold/Italic のテストが追加されていることがわかります。
凡例の線の長さも少し長くなっているようですが、後は 上の方の文字列と矢印のサンプルが少し変更されていること、 下の pattern fill サンプルが一つ削除されていること位でしょうか。
16. は、これまでは replot で範囲指定オプションをつけると 「cannot set range with replot」と言われていましたが、 範囲指定ができるようになったというもののようで、 これは結構重宝するかもしれません。 ただ、現在は、
gnuplot> plot sin(x)
gnuplot> replot [4:5]
とすると、そのエラーは出ないものの
gnuplot> plot sin(x), [4:5]
と認識されて数式が変やで、というエラーになってしまうので、
何かバグがあるのかもしれません。
使い方を勘違いしているかもしれませんので、
また何かわかったら報告したいと思います。
最近、CVS 版が 4.7 から 5.0 alpha と代わり、 5.0 のリリースが近づいてきたこともあり、 色々な更新が CVS 版に入ってきています。 少し忙しいのでそれらを丁寧に紹介はできませんが、 今 CVS 版をインストールすると一番ギョッとするのが 多分「色列」の変更でしょう。 それについて簡単に説明しておきます。
簡単に、「plot sin(x),sin(x-1),sin(x-2),sin(x-3)」などとすると、 現在はデフォルトでは以下のように表示されます。
lt 1 = 赤、lt 2 = 緑、lt 3 = 青、lt 4 = 紫、となじんでいた人には 結構衝撃的だと思います。 実は、新たに「set colorsequence {default|classic|podo}」 という設定が導入され、デフォルトの色列の変更が行われました。 オプションの意味は、以下の通りです。
よって従来の表示に戻したければ、最初に「set colorsequence classic」 としてください。それぞれのサンプルを紹介します。 ついでに test の結果もつけます。
test の結果は右側の凡例だけが変更されていますが、 他の部分は直接色を指定しているので変わりません。 実際にも色を固定したい場合は、 色名を直接指定して描画するといいでしょう。
(cf. 「情報やメモ (05/09 2016)」)
前回の報告 (01/29 2014)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
ちょっと報告に間があいてしまいましたが、 新しい機能や大きな変更がいくつかあります。
最近は研究室の OS の更新作業などに時間が取られていて、 いずれも全くテストできていません。 説明が必要そうなものについて、 ドキュメントからわかることを少し紹介します (いずれも実際に試したわけではありません)。
smooth の unwrap オプションは、 データがラジアンでの角度を表しているとみなし、 連続するデータ間にπより大きなジャンプがないように 2πの整数倍を適宜加える操作を行います。 これは例えば時刻のように、 データ値に巻き戻しのようなものがある場合に便利で、 0:00 を挟んでジャンプせずに連続的なグラフにしたりするのに使えます。
stat で参照できる計算結果には以下のようなものが追加されました。
また、分散の計算は桁落ちが起きにくい 2 パスの計算に修正されました。
fit には、{noerrors | zerror} (errors z と同じ) のオプションが追加され、using 指定する最後の列をデータの標準偏差として 重み計算に使用するように改良されました。 これにともない、using 指定の値の意味が少し変わっていますので 注意してください。
新しいコマンド「import」はかなり大きな機能で、 外部共有ライブラリ (mylib.so や mylib.dll) で定義された関数を gnuplot 内で使用するための仕組み (プラグイン機構) を提供します。 以下のように使います。
import myfun(x) from "/path/mylib"
import myfun2(x,y,z) from "/path/mylib:fun2"
gnuplot ではかなり多くの関数が使えるようになってきていますが、 これにより自分で多くの関数が容易に追加できるようになりました。 「Gnuplot Q&A 掲示板」 の 2708, 2709 番の記事でも触れられていますが、 GNU gsl など、ちまたにある多くの数学ライブラリの関数を gnuplot に取り込むことが可能になります。 ただ、gnuplot の関数の型の特殊性により、 標準的な C 言語外部ライブラリをそのまま使えるわけではなく、 gnuplot 用に書き直す (そのライブラリから gnuplot で使うための仲立ちライブラリを作る) 必要はあります。 gnuplot で利用できる関数を含む外部ライブラリを書くためのサンプルが demo/plugin/* に用意されています。
色名の代わりの直接 16 進定数の指定は、例えば 「plot sin(x) linecolor rgb "0xFFAABB"」 のように書けるようになったということです。 rgbcolor, tc rgb などの指定も同様です。
fit のパラメータ間の共分散の保存は、
例えばパラメータ a と b に対しては、
自動的に変数 FIT_COV_a_b
という名前で
その共分散の値が保存されるようになりました。
Bold, Italic の指定については、最初は LaTeX 風に \bf, \it で
{\it italic-text} {/Times=12 \bf boldface-text}
のように実装されたのですが、すぐに変更され、
{/Times=12:Bold:Italic bold-italic-text} {/:Bold bold-text}
{/:Italic bold-text_{/:Normal normal-text}}
のように、font のオプション指定として
":Bold", ":Italic"
(および ":Normal") と書くように改良されました。
(cf. 「情報やメモ (04/28 2014)」)
02/26 位に gnuplot-4.6.5 がリリースされました。 配布物に含まれる NEWS には、以下のように書かれています。
多少 CVS 版でも見られる変更などが取り入れられていますが、 それほど大きな変更はありません。 媒介変数モードでの疑似ファイルの利用や、 object の clip/noclip などは割りと大きなものかもしれません。
ところで、4.6.5 のアナウンス ( http://www.gnuplot.info/announce_4.6.5.txt) を見て気がついたのですが、現在の CVS 版を引き継ぐ 新たなメジャーバージョンアップは、4.8.0 ではなく、 5.0 になるようですね。 個人的には、中かっこによるブロック化と do for, while をサポートし、 Windows 版インストーラも出だして日本語化も楽になった 4.6.0 が結構インパクトがあったので、 むしろそちらの方が「5」にふさわしかったのではとも思います。
ただ、私が最初に gnuplot を知ってから既に 20 年以上たちますが、 今でもボランティアが継続して地道に進化させ続けていることは すばらしいことだと思います。 それだけ gnuplot の基本的な考え方が優れていて、 多くの人に愛されてきた、 ということを意味しているのではないかと思います。
前回の報告 (12/27 2013)以後、 現在の CVS 版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
今回は、win terminal, qt terminal の修正がかなりありますが、 それよりも大きな変更がいくつかあります。
まず、call の仕様の変更はかなり大きいです。 従来は、call に与えた引数は $0 ~ $N というもので利用していましたが、 この名前のため、および「変数」としての立場が不十分なため、 いくつか副作用がありました。 それを、ハッキリ「文字列変数」として ARG0 ~ ARGN (引数の個数は ARGC) を使うようになりましたので、 スクリプトを変更しないといけないかもしれませんが、 それによる恩恵は大きいと思います。 ARG0 等は文字列変数なので、マクロ展開も可能です。 マニュアルには、例えば以下のような例が書いてあります:
call スクリプトを
plot @ARG1 with lines title ARG3
print ARG2 * 4.56, @ARG2 * 4.56
print "This plot produced by script ", ARG0
のように書いておいて、このスクリプト (script1.gp) を、
MYFILE = "script1.gp"
FUNC = "sin(x)"
call MYFILE FUNC 1.23 "This is a plot title"
のように呼び出すと、実際には、
plot sin(x) with lines title "This is a plot title"
print 1.23 * 4.56, 1.23 * 4.56
print "This plot produced by script ", "script1.gp"
を実行したことと同じことになります。2 行目の ARG2 は、
文字列変数 (ARG2) として使っても数式では自動的に実数に変換されるので、
正しく「1.23 * 4.56」の値が得られますし、
もちろん @ARG2 としても正しく実数値になります。
一方、関数式を意味する文字列の ARG1 (= "sin(x)") の方は、
@ARG1 のようにマクロ展開を使うことで関数式として展開されます。
数式もこのようにして call の引数に渡すことができるようになります。
これ、および最近導入された gnuplot の -c オプション
(= load の代わりに call で呼び出す)
により、可能性がかなり広がることになると思います。
parametric モードで '+', '++' が使えるようになったのも大きな変更です。 関数式描画はサポートしておらず、 データ描画にしか使えないような機能はいくつかありますが、 これによりそれが parametric モードでも利用できるようになります。
set table の「with table」というのは、 table 出力がその時点の描画スタイルに影響を受けてしまうことを 避けるためのもののようです。 with table と明示することにより、 現在の描画スタイルとは無関係に正しく table 出力が行えるようになります (多分)。
gnuplot スクリプトの終了行番号を GPVAL_LINENO で取得できるようにしたのは主にデバッグ用でしょうか。
キーワード skip は、バイナリデータ用のものはありましたが、 今回テキストデータ用にも新設されました。 指定した数だけ、データの先頭行を読み飛ばします。 ヘッダがついているデータを処理する場合に有用です。 なお、「every ::N」でも似たようなことができますが、 「skip N」で読み飛ばした行は every の処理ではカウントされませんし、 「every ::N」だと各データブロックのすべての先頭を読みとばしてしまいます。
最後に、caca terminal という奇妙な出力形式が新設されました。 これは、いわゆるアスキーアートによってグラフを書く libcaca を使った出力で、 一応対話型出力形式になります。 似たものとして、dumb terminal がありますが、 caca terminal では色が使えますし、 実は gnuplot の機能を「フル」にサポートしていて、 例えば 3D グラフをマウスで回転させたり、 hypertext 機能なんかも使えたりします。
libcaca には「バックエンド」と呼ばれるシステムがあり、 それを切り替えて使うこともできるます。 例えばうちにインストールした libcaca だと、 x11, ncurses 等のバックエンドが利用可能なようです。 私もよく把握していないので、 詳しくはマニュアルを参照して頂きたいと思いますが、 demo にあるサンプルなどをいくつか紹介します。
まずは、何はともあれ test の出力から。 比較のため、wxt terminal の出力と並べます。
それなりに頑張っていることがよくわかると思います。
また、容易に想像できると思いますが、細かいグラフや、 3 次元の格子による曲面グラフはあまり得意ではなく、 何が描かれているかほとんどわからなくなります。 以下は surface1.dem にある 3 次元の Sinc 関数のグラフです。
正直なところ、いい角度から見ないと、 曲面なのかどうかもよくわかりません。
一方で、長方形の塗り潰しなどはしっかり書けますし、 色もちゃんと使えますので、ヒストグラム、boxplot、candlesticks、 および 3 次元の pm3d グラフの 2 次元投影図 (set view map) などはかなりしっかり書くことができます。
これらはかなりいい線いっていることがわかると思います。
なお、画面のサイズを変更するには、x11 バックエンドでは set term の size オプションではうまくいかず、 環境変数の CACA_GEOMETRY を使うか、 マウスで描画ウィンドウをリサイズした後で再び 「set term caca」と呼び出すことで変更します。
なお、caca ではASCII 文字の大きさが単位なので、 60x60 で正方形になるわけではなく、 これだとむしろ 1:2 くらいのサイズになります。
実用性がそれほどあるとは思えませんが、 もしかすると解像度の低い携帯端末だとか、 CPU 性能の低い古いコンピュータなどでは それなりに意味があるのかもしれませんね。
(cf. 「情報やメモ (03/14 2014)」)