ページが長いので「しおり」の仕組みを用意してみました。
「しおり用」と書かれた所をクリックしてからブックマークに入れると、
それはページの先頭ではなく、その箇所へのブックマークになります。
(03/03 2006)
今までちゃんと説明していませんでしたが、
ここには、日付ごとに記事 (記事 A とします) を書いていますが、
その最後に、(cf. 「情報やメモ (XX/XX 20XX)」)
のように別な日付の記事 (記事 B とします)
へのリンクがついているものがあります。
これは、「被参照リンク」で、
記事 B が記事 A を参照している (リンクを貼っている) ことを意味します。
つまり、記事 B の方が記事 A より後の記事であり、
記事 A の続きや追加情報、訂正などの内容であったり、
記事 A に関連する別な話題であったりしますので、
記事 A に被参照リンクがついている場合は、
是非そちら (記事 B) もご覧ください。
(01/29 2014)
「情報やメモ (09/05 2018)」 で、開発版付属のデモの一覧を各画像化したものを HTML 化したものを紹介しましたが、 全画像を gif 化して HTML ページに貼ると大変 (ダウンロードも大変) なので、とりあえず PDF 出力と、 pngcairo 出力を GIF アニメーション形式に変えたものの 2 つを 気が向いたときに作って置いておくことにします。
色々新しいデモが追加されています。 GIF アニメーションをざっとみて、詳細は PDF で見てください。 どのスクリプトでその画像が作られているかは、 title 文字列を demo/*.dem で検索するといいでしょう。
(cf. 「情報やメモ (02/26 2019)」)
「情報やメモ (09/05 2018)」 での報告以後の、最近の開発版の更新状況 (概要) を紹介します。
従来、plot に notitle
とすることで
凡例のないグラフを描くことはできましたが、
逆にグラフのない凡例を追加する綺麗な仕組みはありませんでしたので、
凡例をカスタマイズしたい場合は、
範囲外のグラフを描いてごまかすなどの苦労が必要でした。
現在開発版では、plot コマンドの (ファイル名|関数名)
の代わりに「keyentry
」と指定することで、
グラフのない凡例が描けるようになりました。
splot でも可能です。以下にサンプルがあります。
従来 gnuplot では YIQ, XYZ の色空間もサポートしていましたが、 5.2.3 から YIQ が削除されたのに続き、XYZ の色空間も削除されました。 完全でなかったり正しくなかったことなどによるようです。
eval $DATABLOCK
試験段階ですが、データブロック ($data) の evaluate が実装されています。ただし、デモも例もないので、 どういう仕様などかまではよくわかりません。
boxplot のメジアン線の太さを
「set style boxplot medianlinewidth <width>
」
で指定できるようになりました。0 にして消すこともできます。
個人的には、keyentry は少し嬉しいです。
10/08 頃に gnuplot-5.2.5 が公開されました。 5.2.5 での新規機能、変更、修正は以下のようです。
実はほとんど確認していないので、更新部分、変更部分はよくわかりませんが、 個人的には配列の初期化の話は気になります。
「情報やメモ (09/05 2018)」 で紹介した開発版のデモ画像一覧に、 全画像の PDF ファイルを追加しました。 実際には、
gnuplot -e 'set term pdfcairo' all.dem < /dev/null > > all.pdf
と、all.dem の pdfcairo terminal 出力を取り出しただけのものです。
ゆっくりと順番に見るには、多分これが一番よさそうです。
「情報やメモ (06/29 2018)」 での報告以後の、最近の開発版の更新状況 (概要) を紹介します。
linux や vgagl は、Linux で X11 などのウィンドウシステムを使わずに グラフを表示するためのもののようですが、 その仕組み自体が古いことと、 今は sixelgd などの他の新しい方法で代用できることにより削除されました。
デモの追加/更新は、今回 all.dem を走らせてみたら、 見たことがないものが追加されていることに気がつきました。 ということで、以前 「情報やメモ (10/07 2016)」 で作成したデモ画像の一覧を久しぶりに作ってみました。 以前より画像ファイルは 9 枚少ないですが、 前のものにはなかったものも色々あります。 なお、all.dem に取り込まれていないデモは以下のものには含まれていません。
(cf. 「情報やメモ (09/07 2018)」, 「情報やメモ (11/02 2018)」, 「情報やメモ (11/30 2018)」)
「情報やメモ (04/24 2018)」 での報告以後の、最近の開発版の更新状況 (概要) を紹介します。
dospc, pstricks は私は使わないのでよくわかりませんが、 最近の gnuplot の機能が使えるようにする改良が入ったようです。
tgif は私も使いますが、gnuplot の tgif terminal は最近はほとんど使っていません。 以前は tgif terminal の改良などもやったことがあるのですが、 tgif の仕様はあまりわかりやすいものではなく、 また tgif のバージョンによって ファイルフォーマットも多少違いがあったりするので、 新しい gnuplot 用に temrinal を改良するのは少し面倒です。 ただ、tgif terminal の出力を tgif で修正して LaTeX 文書に貼り込むよりも、 post terminal の出力を LaTeX 文書に貼り込む方が綺麗なので、 「tgif terminal」の出番はそれほどないのかなと感じています。
最後の NaN の処理ですが、それは
「plot sqrt(x)
」と「plot '+' 1:(sqrt($1))
」
の差異の報告によるもののようです。
当然、x> 0 の範囲では両者は一致するのですが、問題は
x< 0 の範囲で、
従来は前者は負の x に対する sqrt(x) の値は
NaN として処理され、グラフは描画されないのに対し、
後者は (sqrt($1)) 複素数値関数としての実数部分として処理され、
それで NaN ではなく 0 という値が描画されるようになっていたようです。
現在の開発版では、両方とも NaN として処理されるようになりました。
もちろん、「plot real(sqrt(x))
」とすれば、
複素数値関数の実数部分のグラフが描かれるので、
現在の開発版でも x< 0 の方も 0 が描かれるようになります。
(cf. 「情報やメモ (09/05 2018)」)
私は、gnuplot スクリプトを実行する際、
gnuplot を起動してから .gp の gnuplot スクリプトを load するよりも、
また gnuplot をコマンドラインから
「gnuplot -persist script.gp
」のようにするよりも、
シェルスクリプトのヒアドキュメントとして
gnuplot スクリプトを書く方法を最も良く使います。
この方法を使えば、シェルスクリプトのレベルで gnuplot の外の処理
(前処理、後処理) もできますし、
バージョンの異なる gnuplot を切り替えたり、
gnuplot 用の環境変数の切り替えもそのスクリプト内で行えます。
その方法のメリットなどは、以前にも
「情報やメモ
(03/04 2005; no.2)」、
「情報やメモ (06/07 2013)」
などに書きました。
ところが、最近そのヒアドキュメントによる実行をやっていて、 おかしな現象に気がつきました。 例えば以下のような csh スクリプトで gnuplot を実行する場合ですが、
#!/bin/csh -f
gnuplot -persist <<EOF
set term x11
plot sin(x)
# x
pause mouse
plot x
# 1/0
pause mouse
EOF
このように内部で「pause mouse
」のようなものを入れている場合、
その付近の行頭が 1 文字消えてしまう (gnuplot に渡されない)
ことがあるようです。
上の場合は、例えば「# x
」の行頭の #
が消えて「x
」のみの行が gnuplot に渡され、
「gnuplot> x
」が invalid command だと表示されます。
この現象は gnuplot のバージョンによらず起きるのですが、 実は常に起きるわけではなく、 どのような場合に起きるかをまだよく特定できていません。 ヒアドキュメントでなく、純粋に gnuplot script にして実行すると 起きません。csh script でなく sh script にしても起きるようです。 今のところ、gnuplot が原因なのか、OS が原因なのか、 csh (tcsh 6.20) が原因なのか、 ウィンドウマネージャ (fvwm 2.4.20) が原因なのか、よくわかっていません。
このうち、ウィンドウマネージャはあまり怪しそうではないかもしれませんが、 最初の plot で開くグラフウィンドウの置き場所によって なぜかその起きやすさが変わります。 fvwm は、ウィンドウを開く空き場所が足りない場合は、 ユーザに開く場所を選択させるのですが (重ねて自動的に開くようにもできるがそうしてない)、 その際、元のコマンドを入力した terminal ウィンドウが隠れる位の場所に置くと上の現象が起きやすくなります。 そうでなく、なるべく重ならない見えやすい場所に置くとあまり起きません。
マウスでグラフウィンドウの配置をやっているときに、 pause mouse の入力バッファに何か影響を与えているのかもしれないのですが、 どうもよくわかりません。 まあ、ヒアドキュメントの途中で mouse や q による pause 処理などを入れることがそもそも間違いなのかもしれません。 もう少し調べてみたいとは思いますが、 もし何かご存知でしたら教えて頂ければと思います。
なお、回避策としては、消えてしまうのは行頭 1 文字だけのようなので、
コメント行の場合は #
を ##
とすれば済みますし、
set
などのコマンド行の行頭文字が消えてしまう場合は、
その行の先頭に空白を一つ入れればとりあえずは問題ないようです。
(cf. 「情報やメモ (03/26 2020)」)
06/04 頃に gnuplot-5.2.4 が公開されました。 5.2.4 での新規機能、変更、修正は以下のようです。
今回は、前回の 5.2.3 のリリースから 1 ヶ月位の緊急リリースですが、 修正の部分にあるもの (特に対数軸と refresh) に関する修正版のようです。
なお、今回追加されている、 call の引数を配列変数として使えるようになった仕組みは、 それなりに大きな改良だと思います。9 つまで、 という引数の個数の制限もはずれたのではないかと思いますが、 それは未確認です。
日本語マニュアルも若干修正がありましたので、更新しておきました。
「情報やメモ (05/20 2018)」 で、授業の教材用の動画を作成、と書きましたが、 gnuplot のサンプルとしてここで紹介します。
最近、数学の授業で、プラスチックフィルムを丸めたもので y=sin x や y=cos x のグラフの実物を見る、 ということを紹介しているのですが、 それとその説明をアニメーション化できないかと考えました。 だいたい以下のようなものです。
scenetime = 4.0 # 1 シーンのアニメーション時間
N = 20 # アニメーション分割数
c_ax = -1 # 軸の色
c_cn = 7 # つなぎ目
c_sf1 = 4 # 曲面の色
c_gr1 = 2 # グラフの色
c_sf2 = 5 # 平面の色
c_gr2 = 6 # 平面上のグラフの色
set term wxt size 600, 600
set xrange [-1.15*pi:pi]
set yrange [0:2*pi]
set zrange [-pi:2*pi]
unset xtics
unset ytics
unset ztics
unset border
set view equal xyz
set view 75, 60
set xyplane at -pi
# 境界線は全部省いて、x,y,z 軸を作り、軸のスケールは同じにする
set arrow 1 from -1.5,0,0 to 1.5,0,0 lc c_ax lw 2
set arrow 2 from 0,0,0 to 0,2*pi + 0.5,0 lc c_ax lw 2
set arrow 3 from 0,0,-1.5 to 0,0,1.5 lc c_ax lw 2
# 各軸
set parametric
set urange [0:2*pi]
set vrange [0:2*pi]
# v は y 方向のパラメータ (円柱の軸方向)、
# u は最初は z 方向、丸めた後は円柱断面の円周のパラメータ
xtau(u, tau) = (tau > 0)? (cos(tau*u) - 1.0)/tau + 1.0 : 1.0
ztau(u, tau) = (tau > 0)? sin(tau*u)/tau : u
# 平面を徐々に丸めるための関数 (tau = 曲率)
interp(x, y, t) = x + t*(y - x)
# view の回転角の補間用
tm = scenetime/N
# pause 時間
do for [j=0:N] {
tau = 1.0*j/N
splot \
xtau(u, tau), v, ztau(u, tau) not lc c_sf1, \
xtau(u, tau), u, ztau(u, tau)
not lc c_gr1 lw 2, \
xtau(0, tau), v, ztau(0, tau) not lc c_cn, \
xtau(2*pi, tau), v, ztau(2*pi, tau) not lc c_cn
pause tm
}
do for [j=1:N] {
mu = 1.0*j/N
set view interp(75, 90, mu), interp(60, 90, mu)
replot
pause tm
}
1 つ目の do で splot している部分は、
平面を徐々に曲げて円柱になるようにしているのですが、
そこで 4 つのパラメータ関数を描画しています。
これらはそれぞれ次のようなものを表しています。
xtau(u, tau), v, ztau(u, tau)
」:
曲率 tau の曲面 (円柱面の一部分)
xtau(u, tau), u, ztau(u, tau)
」:
その曲面上の曲線 (元は z=x の直線)
xtau(0, tau), v, ztau(0, tau)
」:
元の正方形の y 軸上にある底辺 (円柱の接合部分の上のへり)
xtau(2*pi, tau), v, ztau(2*pi, tau)
」:
元の正方形の y 軸に平行な上辺 (円柱の接合部分の下のへり)
2 つ目の do 部分は、円柱を正面から見るように視線 (set view) を徐々に変更しています。
こうやって対角線を引いた正方形を丸めて円柱を作ることで、 円柱正面から見ると元の正方形の対角線が z = sin y のグラフになります (最後の円柱の横軸は実は y 軸)。 元の正方形の一片が 2π であると、 これは本当に z = sin y のグラフになることが説明できます。 その説明も Scene 2 として追加した GIF アニメーションファイルを 以下に置きます。
こちらは全体のソースは示しませんが、上のソースが Scene 1 の部分で、 Scene 2 は上のソースにラベルなどを追加して、 view を変更しながらほぼ繰り返して表示しているだけです。 なお、「情報やメモ (05/20 2018)」 のアニメーション同様、gif terminal の animation 機能ではなく、 一旦 pngcairo terminal で PNG 出力したものを GIF に変換して、 gifsicle によって GIF animation 化しています。
「情報やメモ (05/17 2018)」 に、 set object circle による円弧の一部の描画の話を書きましたが、 それは授業の教材用の動画を作成する際に関連する話でした。 されにそれと平行して、 「掛谷時計」なるものの動画サンプルも作ってみました (こちらは授業とは関係ありません)。 こちらの方を参考までに紹介いたします。
「掛谷時計」は、私の勝手な造語ですが、 数学には有名な「掛谷問題」というものがあり、 それに関連した時計のデモです。 「掛谷問題」は詳しくは検索してもらえば分かりますが、 掛谷宗一という数学者が出した
「線分を 1 回転させることができる最小の平面領域はどんな図形か」といった問題で、凸図形に限らなければ、いくらでも面積は小さくできる、 ということが証明されています (ベシコヴィッチ)。
「掛谷時計」は、その線分を時計の針に見立てて、 その小さい面積を持つ領域内で時計の針を 1 回転させようというものです。
実は以下に紹介するものは、正確には掛谷問題の解になっていない (線分の針でないし、正しく回転する領域を作っていない) し、 ベシコヴィッチの解とも違いますが、 上記のサイトの最後の方に書いてある図形をヒントに作ってみたものです。 動画 (GIF animation) と、その gnuplot ソースを以下に示します。
set parametric
R = 10 # 時計の円の半径
rho = R/tan(pi/60) # 針の通り道の円弧の半径
set xrange [-1.3*R : 1.3*R]
set yrange [-1.3*R : 1.3*R]
set size square
set trange [0:1]
jsx0(r, j) = r*cos(2.5*pi - 2*pi*j/60.0)
jsy0(r, j) = r*sin(2.5*pi - 2*pi*j/60.0)
# j 番目の文字盤の半径 r の目盛位置の x, y 座標
set for [j=0:58:2] arrow j+1 from jsx0(R*0.95, j), jsy0(R*0.95, j) \
to jsx0(R*1.05, j), jsy0(R*1.05, j) nohead lt -1
set for [j=1:59:2] arrow j+1 from jsx0(R*0.95, j), jsy0(R*0.95, j) \
to jsx0(R*1.15, j), jsy0(R*1.15, j) nohead lt -1
# 時計の目盛の刻み
set for [j=0:58:2] label j+1 sprintf("%d",j)
at jsx0(R*1.1, j), jsy0(R*1.1, j) center \
rotate by (360-6*j) font ",10"
set for [j=1:59:2] label j+1 sprintf("%d",j)
at jsx0(R*1.2, j + 30), jsy0(R*1.2, j + 30) center \
rotate by (180-6*j) font ",10"
# 時計の目盛の数字
set object 1 circle at 0,0 size R fs empty border lt 1 front
# 時計の外周
x1(t) = - rho + rho*cos(t*pi/30)
y1(t) = R - rho*sin(t*pi/30)
# 針の通り道の円弧の描画関数 (j=0 用)
x0rot(x, y, j) = x*cos(j*pi/30) + y*sin(j*pi/30)
y0rot(x, y, j) = - x*sin(j*pi/30) + y*cos(j*pi/30)
# j*pi/30 の回転変換
x1rot(t, j) = x0rot(x1(t), y1(t), j)
y1rot(t, j) = y0rot(x1(t), y1(t), j)
# x1(t), y(1) を j*pi/30 回転したもの
set for [j=0:58:2] object j+10 circle
at x0rot(-rho, R, j), y0rot(-rho, R, j) \
size rho arc [-6-6*j:-6*j] nowedge fs empty border lt 2 lw 2
set for [j=1:59:2] object j+10 circle
at x0rot(rho, -R, j), y0rot(rho, -R, j) \
size rho arc [180-6-6*j:180-6*j] nowedge
fs empty border lt 2 lw 2
# 針の通り道の曲線の描画 (奇数と偶数で描き分け)
divnum = 12 # 曲線を 12 分割 (したものを擬似的な線分の針とする)
fix = 0.5 # 表示用の時間の調整
do for [j=0:59] {
if (j%2 == 0) {
xf(t, k) = x1rot((k - 1 + t)/divnum, j)
yf(t, k) = y1rot((k - 1 + t)/divnum, j)
} else {
xf(t, k) = - x1rot((k - 1 + t)/divnum, j)
yf(t, k) = - y1rot((k - 1 + t)/divnum, j)
}
do for [k=1:divnum] {
plot xf(t, k), yf(t, k) not w l lt 7 lw 2
pause 1.0/divnum*fix
# 12 分割したものを順番に表示することで
移動するように見せる
}
}
最初、曲線も plot の parametic モードで針と一緒に描画しようと思ったのですが、 動かすのは針だけだし、 円弧は set object circle で描けるはずだということで、 そのように描いてみました。 ただし、 「情報やメモ (05/17 2018)」 の最後に書いたように、 gnuplot-5.2.3 以降でないとこの曲線部分がうまく表示されません。 また、GIF animation なので、表示速度は環境によってまちまちでしょう。 よって時計の役目は実際には果たしません。
なお、この GIF animation は gif terminal の animation 機能ではなく、 一旦 pngcairo terminal で PNG 出力したものを GIF に変換して、 gifsicle によって GIF animation 化しています (その方が綺麗になるため)。
(cf. 「情報やメモ (05/24 2018)」)
最近の gnuplot にも関係する話を一つ紹介しておきます。
現在の gnuplot では、グラフ上に円やその一部を描く場合、
parametric mode で
自前で「a+r*cos(t),b+r*sin(t)
」を plot する、
という方法以外にも、
「set object circle
」や「plot with circle
」
で行うことができます。
特に、前者は plot とは独立に描くことができて便利ですが、
ヘルプドキュメントはやや不親切なような気がします。
ということで、一つサンプルを紹介します。
ヘルプドキュメントには、中心 (at, center)、半径 (大きさ; size)、 中心角の範囲 (arc) の指定の仕方は書いてあるのですが、 その他は詳しくは描かれていません。 円周の部分の属性の指定、 および円の内部 (円盤) の部分の属性の指定について、 上のサンプルを元に紹介します。
set object circle による円は、 円周部分 [C] と 円盤部分 [B]、および arc で円の一部分 (扇形) を指定した場合には、その境界となる半径の部分 [R] の 3 つの部分からなります。
円盤部分 [B] の属性は、fillstyle
(fs) で指定します。
fillstyle の詳細は、「help set style fill
」
で参照できますが、
fs empty
: 何も描かない
fs solid [密度]
: [密度] の濃さで塗りつぶす
fs pattern [番号]
: [番号] の模様で塗りつぶす
という指定になっています。
fs と solid, pattern の間に transparent
を書くと、
出力形式がサポートしていれば透明化も行われます。
塗りつぶしの色は、少し厄介ですが実は fillstyle とは独立になっていて、
fillcolor
(fc) オプションで指定します。
fillcolor の指定は、「help fillcolor
」で参照できますが、
これもやや不親切です。具体的には以下のように指定できます。
fc default
: デフォルト色 (通常黒)
fc bgnd
: 背景色
fc black
: 黒
fc lt [番号]
: [番号」の線種の色
fc ls [番号]
: [番号」のラインスタイルの色
fc rgb [値]
: [値]の指す rgb 色 ([値] は色名の文字列か、
rgb 値を示す文字列、rgb 値を表す整数値。
fc "[色名]"
: "[色名]" の指す色
rgb 値を示す文字列、rgb 値を表す整数値。
fc palette {frac [値]|cb [値]}
:
pm3d パレット値の指定 (詳細は「help colorspec
」参照)
ほぼ、「help colorspec
」の lc や tc
と同等の指定ができると思って構いません。
色名の指定は、「fc rgb "red"
」でも、
rgb をつけずに「fc "red"
」でも (lc 形式)
どちらでもいけるようです。
なお、black と bgnd は引用符 " で囲む必要はありません。
次は、境界部分、すなわち [C] と [R] の部分の属性ですが、
これは fs のサブオプションの border
で設定します。
よって、fs の指定の後ろに続けて書かなければいけません。
「help set style fill
」で参照できますが、
noborder
: 境界 ([C],[R]) は描画せず
border lt [番号]
: [番号] の線種で描画 (lt は省略可)
border lc [色指定]
: fc 同様の色指定
のように指定できます。さらにその後ろに「lw [倍率]
」
をつけて境界線の幅を変えることもできます。
[C] と [R] の部分を別々の属性にすることはできません。
しかし、最初のサンプルでわかるように、
実は [R] の部分だけを削除することが可能で、
それは、set object circle に「nowedge
」オプションをつけます。
わかりにくいのですが、これはヘルプドキュメントでは、
「help set style circle
」の節に少しだけ書かれています。
よって、例えば「arc [0:20] nowedge fs empty border lt ...
」
のようにすれば、
円盤部分、扇形部分のない円弧の部分だけが描かれることになります。
さて、ある意味ここからが本題なのですが、 少し前のバージョン の gnuplot では、 円の中心が描画領域におさまっていなくて 円弧の部分だけが描画領域におさまっている場合、 上のような指定によってその円弧だけを描こうとすると、 円弧も含めてクリッピングされてしまって 何も描画されないようになっていました。 現在の開発版、および最近リリースされた gnuplot-5.2.3 では、 円弧だけがちゃんと描画領域に描画されるように修正されています。 円弧のようなもので定型の飾りを作ろうとする場合には必須の機能だと思います。
(cf. 「情報やメモ (05/20 2018)」)
05/04 頃に gnuplot-5.2.3 が公開されました。 5.2.3 での新規機能、変更、修正は以下のようです。
前回のリリースから半年位間があきましたので、 だいぶ変更や修正が入っています。 5.0 系は 5.0.7 まで出て、5.2.0 が出るまで 2 年半位は 5.0.X が続きました。 今は 5.2.0 が出てから 8 ヶ月位経ちましたが、 そこからすると 5.2 もあと 2 年近くは続くのでしょうか。
開発版の 5.3 の機能の一部はリリース版の 5.2 にも後退導入 (backport) されてはいますが、基本的には新機能は開発版の方でしか使えないので、 新しい版 (5.4) がなかなかリリースされないと、 新機能がリリース版では使えない状況が長く続くことになってしまいます。 個人的には所詮フリーソフトなので、 開発版とリリース版をあまり神経質に分ける必要もないのでは、 間違いがあればその都度直せばいいのでは、とも思いますが、 gnuplot もかなり大きくなってしまいましたので、 すべてのことには目が届きにくくなっていますし、 色んな報告が開発メンバーに送られていることを考えると、 ちょっと直してリリース、というわけにもいかないのでしょうね。
今はリリース前に RC 版 (release candidate)、testing 版などの 公開前バージョンが数週間から数ヶ月程度公開され、 それをテストしてください、という仕組みになっていますが、 私にはちょっとその辺も少し億劫に感じます。
今まで書いてなかったようなので、書いておきます。
gnuplot に付属する demo/all.dem を gnuplot で load するとほぼすべてのデモが表示されますが、 次のグラフに進むには Enter やマウスクリックの入力が一つ一つ必要になります。 これを自動進行させるには、 以前 「情報やメモ (10/11 2011)」 に書いたように、 Unix では /dev/null をリダイレクト入力させればいいのですが、 MS-Windows ではそこでは空行が並んだファイルをリダイレクト入力させるか、 または gawk の空行出力をパイプ入力させる、という方法を紹介しました。 しかし、他の簡単な方法に気がつきましたので報告します。
なお、通常 demo/ は「C:\Program Files\gnuplot」などの下に置かれ、 そこには一般ユーザは書き込み権限がないので、 そのディレクトリで直接 all.dem を実行すると fit.dem あたりで止まってしまうと思います (fit.log を書き出せない)。 よって、demo/ を実行するためには、 一旦 demo ディレクトリ自体を自分のホームディレクトリに コピーする必要があります。 ディレクトリのコピーは、エクスプローラーを使う方が簡単でしょうが、 コマンドプロンプトでやる場合は xcopy を使えばいいでしょうか:
xcopy /s "c:\Program Files\gnuplot\demo" demo\
その後で、そのディレクトリに移動して gnuplot を実行しますが、
それに「echo.
」をパイプで渡します:
cd demo
echo. | "c:\Program Files\gnuplot\bin\gnuplot.exe" all.dem
これで自動更新されて all.dem のすべてのデモが高速に流れるようですが、
「echo.
」だけでいい理由はよくわかりません。
なお、これは 0 秒間隔で次の plot に移動しますが、
gawk を使えばそれぞれを数秒間隔にできます:
gawk "BEGIN{t=systime(); while(1){ while(systime()<t+2);
t=t+2; printf \"\r\";fflush(stdout)}}"
| "c:\Program Files\gnuplot\bin\gnuplot.exe" all.dem
少し長いので、バッチファイルにする方がいいでしょう。
fflush(stdout) は、すぐに print の結果が出力するためのものです。
また、printf で「\r」を出力させているのは
単に print とするだけでも同じようになるように思えますが、
print で改行だけを出力させると、MS-Windows ではそれが「\r\n」に展開され、
gnuplot はそれを受けとると 2 つの改行 (\r と \n)
の入力と認識してしまって 2 回分の plot を一気に実行してしまうためです。
t+2 の部分 (2 箇所) を t+3 に変えれば 3 秒間隔になります。
さらに、1 秒より短い間隔にするには、 1 秒より短い間隔で改行 (\r) を出力するコマンドを使えばいいのですが、 それは gawk では難しく、 バッチファイルなら相当がんばればできなくはなさそうですが、 そういうプログラムを C や他の言語で書く方が簡単でしょう。
(cf. 「情報やメモ (08/26 2020)」)
前にも書きましたが、開発版の管理システムが CVS から Git に変わりました。 そのため、ChangeLog にソースの更新がうまく反映、記録されなくなりました。
従来ここで報告してきた開発版の更新記録は 主に ChangeLog の記録によっていて、 gnuplot.doc の変更や時にはソースを参照しながら書いてきたのですが、 git 管理のソースツリーからのログの取得がよくわかりませんし、 それが取得できても更新記録を書くのに適しているのかよくわかりません。
ということで、詳細な更新記録の紹介はしばらく停止します。 gnuplot.doc の方には新しい機能や仕様変更に伴なう情報が追加されていますし、 NEWS ファイルも更新されているようなので、 従来の ChangeLog ほど詳細ではありませんが、 今後は主にそれら書き加えられた情報を元に開発版の更新情報を 随時紹介したいと思います。
とりあえずこれまでの情報を紹介します。 まずは ChangeLog の 2018-01-26 から 2018-02-11 までの情報から。
次は、gnuplot.doc に追加された情報から。
色々新機能もありますが、いくつかは既に以下にサンプルがありますので、 そちらを参照してください。
(cf. 「情報やメモ (06/29 2018)」)
現在の gnuplot の開発版 (Git 版) は、 以下からその snapshot アーカイブが一括ダウンロードできます。
ところが、従来の CVS 版と違い、それを展開して、
./prepare
./configure
make
とやってもうまくコンパイルできず、たとえばうちの環境では make が
Making all in src
cut: ../.git/HEAD: ファイルもディレクトリもありません。
のように言って止まってしまいます。
src/timestamp.h というファイルを src/Makefile で作成する際に、
git リポジトリであることを仮定した形になっているために
snapshot のアーカイブでは失敗するようです。
これは、例えば以下のパッチを当ててから prepare, configure, make と進むといいようです。 短いので、手動で src/Makefile.am を修正してもいいでしょう。
なお、src/timestamp.h には本当は snapshot の情報も入れるといいのでしょうが、 上のパッチはとりあえずは make した日付だけを入れているので、 あまりいい解決策ではありません。 必要なら、パッチを当てたあとに src/timestamp.h を手動で修正してください。
前回の報告 (10/11 2017)以後、 現在の開発版に入れられた主な機能について紹介します (ChangeLog, manual の更新部分等より)。
前にも書きましたが、開発版の管理システムが CVS から Git に変わりました。 そのため、何度か ChangeLog の更新がうまく行ってなかったりしているようです (12/03 - 12/26, 01/11 -)。 上の情報は主に ChangeLog によっていますので、 いくつかの更新情報が抜けている可能性があります。