gnuplot を使おう。 その3
レス数が900を超えています。1000を超えると表示できなくなるよ。
gnuplotすごく重宝してるけど、唯一許せないのは
スクリプトにした時とかに結果を標準エラー出力に掃き出すこと。
なにをどう考えてそういう挙動を実装したんだ?
もちろん
set print '-'
で出力先を標準出力にできるのは知っているけれど
既定が標準エラー出力なのは納得いかない。というか嫌い。 永らくgnuplot最高と思ってたけど、最近jupyter notebook使いだしてこれで十分な気がしてきた
少なくとも普段使いとしては >>680
stderrにしないとバッファリングの関係でうまく使えないケースがあるって話を
前世紀のネットニュースcomp.graphics.gnuplotでやってたような…
msdos用か旧mac用か…思い出せない >>682
へぇ〜。と思ってちょろっと探したけどそれらしい発言が見付からんな。
誰かソース持ってない? シェルのreadコマンドのように、値を標準入力からセットするコマンドってないですか? どういうことしたいかいまいちよくわからんが、プロットしたい値を入力したいということなら、多分ある >>686
バッチ処理中に標準入力を受け付けて,その値でプロットなどを作成したいと
いうことですか。
普通にやったらたぶんできない。 >> 689
以下ならできる。
初期化ファイル "header" の後、対話型モードを起動し、
その後別のコマンドファイル "tailer" を実行する:
gnuplot header - trailer 何回もすまん。
上の例は
特別なファイル名 "-" は、コマンドを標準入力から読み込むことを意味します。
を使っているにすぎない。 >>686
>値を標準入力からセットするコマンド
ってのが何を意味してるのかいまいちわからんが
君のやりたいことは多分できる
もうちょっと詳しく書いてくれれば
親切な人が答えてくれるはずだ 5.2.4 windows バイナリ で
リンクしたfontconfig(Ver. 2.13.0)バグがあり,
gnuplotにバグが生じていました。
(日本語のロケールではこのバグはでない。)
https://sourceforge.net/p/gnuplot/bugs/2069/
https://sourceforge.net/p/gnuplot/mailman/message/36410314/
依存ライブラリをアップデートしてfontconfigをVer. 2.13.1
にしたところバグはfixされたようです。
アップデートしたバイナリがあがっているようです。 引用する 現在のパスワード
???????
bump PATCHLEVEL to 5.2.5a in anticipation of release 5.2.5 next month
https://sourceforge.net/p/gnuplot/gnuplot-main/ci/5d6c57f66176786893fe02eb5d5b317877877d0d/
ということで,もうすぐ5.2.5がリリースされそうです。 gaussianのcube形式ボリュームデータと言って分かる方いますか。中身テキストです。
gnuplotでこれを読んで等値面とか表示出来ると手軽で良いんだけど、そう言う拡張を誰か作ってないですかね? PyMOLは一度試したけど、色々とコマンドや設定を覚えないと使えなくて、うーんって感じだった。
でも、バッチ方式、set 何々方式って意味でPyMOL は gnuplot と同じか。
使ってるうちに慣れるかな。 >>703
ググってみた。
cube2xyz: convert cube data to xyz and slize segments/planes
http://larrucea.eu/cube2xyz/
Pythonのスプリプトみたい。 >>706
つづき
このページのグラフは掃き出させたデータをguplotで処理してるっぽい。 昨今AIとか機械学習が持て囃されてるけど、gnuplotはそのブームに乗れてますの? >>708
gnuplot はあくまでプロットソフト。機械学習とかなら、python などを使えばいい。
gnuplot はプロットソフトとして進化し続けている。
私は、gnuplot はそれでいいと思っている。 >>709
> gnuplot はあくまでプロットソフト。機械学習とかなら、python などを使えばいい。
そうだよね。
gnuplot は unixy であるべきと思う。
python は太り過ぎ。 チューリング完全な言語が太り過ぎ(複雑過ぎってこと?)でunixyじゃないってのは違和感があるなあ ennhanced テキストでのフォント指定で空白あるフォント名が使えない問題がありました
がフォント名をシングルクォートで囲むことで使えるような変更が開発版でありました。
リリース版はgitのリリース版ソースは変更されているので5.2.7(5.4になるかもしれませんが)で
での対応となります。 >>680
遅レスすまぬ。理由が分かったのが昨日だから。
>スクリプトにした時とかに結果を標準エラー出力に掃き出すこと。
>なにをどう考えてそういう挙動を実装したんだ?
https://sourceforge.net/p/gnuplot/bugs/2126/
Writing non-graphics content to stdout would break use of gnuplot as a filter.
For example:
GNUTERM=postscript myprogram | gnuplot > result.ps
GNUTERM=svg myprogram | gnuplot > result.svg
だそうだ。
すなわち,標準出力してしまうとフィルターしてgnuplotを使えないからだそうだ。
納得するかどうかはしらんが。 Gnuplot はユーザーはwindows 版が圧倒的に多いけど、開発はlinux 上でおこなわれているからなあ。unixyになるわな。 Macにaquaterm込みで導入したいんですけどaquatermのアプリはインストールしてるのに gnuplotのインストールで認識されなくて困ってるんですが原因はなぜかわかりますか? >>717
Mac user じゃないからよくわからんが、mac でも最近ばqt とかwxtとかを使うのではないかな。 >>717
gnuplotのプロンプトで set term と打ってaqua がでてくるのかな? >>718
バージョンはMojaveです
デフォルトだとqtなんですけどネット見るとみんなaquaterm入れてる感じなんで真似しているんですが上手くいかない感じです
qtでも問題ないですかね? >>719
homebrewでインストールしようとしたんですが、aquatermのappはインストールされているのにも関わらず―with-aquatermのオプションが無効になってる感じです >>722
それは昔の話で今はwxtが主流だと思うぞ >>723
それはWindowsの場合ですか?
Macではqtでも大丈夫ですか? gnuplotはlinuxで開発されていて、linuxではqtがデフォルト。qtで問題ない。 >>724
Macでbrew経由wxt使ってる。
大昔はAquaTermだったけど、綺麗さの差は感じない。
何より画面に出力するのはあくまでプレビューで最終出力は適宜PDFとか画像とかにしてるし。
qtは使ったことないからわからんが好きなもの使えばいいよ windowsでは、qtはこったプロットで表示に難ありで、wxtがデフォルト。ただし、windowsでは、windowsターミナルもちゃんと最近gnuplotの進化に対応している。aqua ターミナルは知らん。 みなさんの指摘どおり上位互換があるみたいなので古いのに深入りするのはやめます
どうやら私が情弱だったみたいですね
ありがとうございました >>729
gnuplotを使う人は結構ここみるので,あなたの質問への質疑応答が
これからmacにgnuplotをインストールする方への有用な情報となった。 >>725
これまじ?wxtだと思ってた
Qtって何か好きになれないんだよなー
もっとスリムにしてくれよと >>733 実はgnuplotは現在なにもしていしないで、フルビルドするとどんなプラットホームでもqtがデフォルトだ。windowsはビルド時にオプションでwxtにしている。
私もqtが好きではないのでlinuxては.bashrcで
export GNUTERM=wxt
をやってる。 >>736
Windowsバイナリをアップロードしました。 Changes in 5.2.7
================
* NEW "set pm3d noclipcb" will skip drawing quadrangles with color < cbmin
* NEW pm terminal supports utf8, dashed lines, bold/italic text
* NEW imaginary component of array values is available to "using" in column 3
* NEW gnuplot --slow may help use of qt terminal with slow system font server * CHANGE splot "with points pt 0" acts like "with dots"
* CHANGE (tikz) improved default interpretation of gnuplot arrowhead style
* CHANGE teach hidden3d to handle double-headed vectors (arrowstyle "heads")
* CHANGE "unset title" or "reset" resets all title properties to default
* CHANGE font names passed to enhanced text processing may be in quotes
* CHANGE cairo terminals accept fractional font sizes
* CHANGE "plot with table" does not output trailing field separator
* CHANGE better centering for clustered histograms
* CHANGE clear STATS_* variables before performing analysis
* CHANGE cairo, libgd, and svg terminals handle LT_NODRAW by not drawing at all
* CHANGE svg terminal clickable icons are in-line data rather than external refs
* CHANGE revise space allocated for ylabel; allow text justification for ylabel
* CHANGE reduce overhead, making it feasible to have 10^6 hypertext labels * FIX "plot with table" unnecessarily limited string column output to 60 chars
* FIX (windows) make sure graph window is shown even if the program is "hidden"
* FIX hidden3d mode was not correctly dealing with arrowstyle backhead
* FIX sprintf in 'using' spec must not clobber numeric locale
* FIX tikz - request for polygon with 0 vertices could hang terminal
* FIX lua/tikz - do not attempt to ftruncate output being piped through stdout
* FIX tkcanvas - do not attempt to ftruncate output being piped through stdout
* FIX handle NaN values in input stream to "stats FOO matrix"
* FIX prevent extra read past the end of a datablock holding matrix data
* FIX pm - issues in box and polygon fill, (wide) lines, enhanced text, images
* FIX dropped character in piped input stream if plot window is manually closed
* FIX extraneous dots and potential segfault from splot with contour labels
* FIX boxplots - color sequence correctly starts with specified linetype
* FIX incomplete initialization led to segfault from "gnuplot -c foo.gp baz"
* FIX Allow "pm3d depthorder base" to handle 3D quadrangles with logscale z 5.2.7のNEWSの和訳
5.2.7 での変更
==============
* 新規 "set pm3d nolipcb" は cbmin より小さい色の四辺形の描画をスキップ
* 新規 pm 出力形式で utf8, 破線、ボールド、イタリック文字列をサポート
* 新規 配列値の虚数部分を "using" で 3 列目として使えるように
* 新規 遅いシステムフォントサーバでの qt 出力形式用に gnuplot --slow * 変更 splot "with points pt 0" が "with dots" 同様になるように
* 変更 (tikz) gnuplot の矢先スタイルのデフォルトの実装の改良
* 変更 hidden3d で双頭のベクトル (arrowstyle "heads") を処理するできるよう
* 変更 "unset title" や "reset" でタイトル属性をすべてデフォルトに
* 変更 拡張文字列処理に渡すフォント名を引用符に入れれるように
* 変更 cairo 出力形式で非整数のフォントサイズ指定を可能に
* 変更 "plot with table" が引き続くフィールド分離子を出力しないよう
* 変更 積み上げ型ヒストグラムの中央揃えの改良
* 変更 解析の実行前に STATS_* 変数をクリア
* 変更 cairo, libgd, svg 出力形式で LT_NODRAW を何も描かないように処理
* 変更 svg 出力形式のクリック用アイコンを外部参照でなくインラインデータに
* 変更 ylabel 用のスペースの改善と位置揃えを可能に
* 変更 10^6 ものハイパーテキストラベルを持てるようオーバーヘッドの削減
* 変更 とても多くの fig 出力形式の改善 * 修正 "plot with table" の文字列出力の 60 文字への不必要な制限
* 修正 (windows) gnuplot が隠れていてもグラフウィンドウが見えるように
* 修正 hidden3d モードが arrowstyle backhead を正しく処理していなかった問題
* 修正 using 内での sprintf は数値ロケールを必ず壊さない
* 修正 tikz - 頂点 0 の多角形を要求するとドライバがハングしていた
* 修正 lua/tikz - stdout へのパイプ出力の際に ftruncate しようとしてなかった
* 修正 tkcanvas - stdout へのパイプ出力の際に ftruncate しようとしてなかった
* 修正 "stats FOO matrix" への入力列の NaN 値の処理
* 修正 matrix データを保持するデータブロックの最後に追加入力を通さないよう
* 修正 pm - 箱と多角形の塗り潰し、広い線、拡張文字列処理、画像等の問題
* 修正 描画ウィンドウを手動で閉じた際にパイプ入力の文字列が落ちる問題
* 修正 等高線ラベル付きの splot での無関係のドットと内在的な segfault の問題
* 修正 boxplots - 指定した線種で正しく色列が開始するように
* 修正 "gnuplot -c foo.gp baz" で不正な初期化が segfault を引き起こす問題
* 修正 "pm3d depthorder base" で対数軸の z で 3D の箱の処理を可能に 結構,変更,修正があります。バージョンアップできる人はした方がいいでしょう。 データファイルの何列目を使うかを変数で指定したくて
a=2
plot "foo" using 1:(column(a))
とやると、using 1:2と同じでうまくいくんだけど、aをxにするとあたかも
using 1:(column(0)) かのように振る舞う。yなら問題ない。
xという変数名自体に何か特別な意味ってありましたっけ? x はgnuplotではx軸の変数。
例えば
plot x -x**3
splotではx, y になる。 plotでは通常xは特別。parametricではtは特別。
splotでは通常x, yは特別。parametricではu, vは特別。 internal use; post-5.2.7 but not yet a release candidate for 5.2.8
https://sourceforge.net/p/gnuplot/gnuplot-main/ci/dd73aeb3fbcb60bc5788339aff31928d0ad241b9/
git のstableで Bump version to 8alpha というコミットがありました。
あくまで内部的なものなのでこれが次は5.2.8であるというわけではないのですが
5.4でなく,5.2.8がでるのでしょうか? 多数のファイルのN列目を表示したいとき、plot "file0" using 1:N, "file1" using 1:N, ・・・ってつらつら書く以外に楽な方法ないかな
たとえばワイルドカードみたいなの使えて plot "file*" using 1:N とかできたら便利なんだけど 5.2.8がでたよ。5.2では最後らしい。windowsバイナリは遅れるよう。 windowsバイナリもアップされています。失礼しました。 plot forってめんどくさい
シェルみたいに"file*"だけで処理できたらいいのに 重ね書き順とかに拘りがないなら plot "<cat file*" で良さそうだけど >>759だと全部くっついて1個のグラフみたいになった
やるとしたらこんな感じかな
p for [f in system("ls file*")] f t f
もう少しスマートにできたらいいのだが 目盛り線の入れ方,set xticsとかで目盛り間隔指定できるけど,
x軸をn分割して目盛りを入れるみたいなことってできますか?
例えば,x軸が0〜10のとき,「4」を指定したら2.5,5,7.5に目盛りを打つ,
「20」を指定すると0.5ごとに目盛りを打つとか。
なんでこんなことがしたいかっていうと,
大量の数値データからスクリプトで大量のグラフ作ってepsに出力,
TeXに食わせて最終的にPDF化してます。
数値データはいろんな種類があって軸の範囲はautoscaleに任せるんだけど,
デフォルトでplotすると目盛り間隔が狭すぎたり広すぎたりするから,
軸の分割数を統一できるといいなあと思う次第で。
なんとなく簡単にできそうな気がしてマニュアル見たんだけど,
自分で見た限りだとそんな機能なさそうでした。
やるとしたら一旦ダミーでplotしてGPVAL_X_MIN/MAXとか
使って計算するしかないかな。めんどくさいけど。 何その用途ならgnuplotじゃなく、今ならpythonとか使った方がいいんじゃない?
仮にそれが解決しても、また不満が出てきそうだけど… pythonでgnuplotのスクリプトを吐けば解決 >>762はpythonかわかんないけど
スクリプトでやってるんじゃないの
その上でgnuplotの機能自体でできないか
って聞いてんだと思うけど
答えとしては結局スクリプトでやるのが
正解だと思うけど こんにちわ。
なんと、「算術平均」の拡張版ができました。こちらをご覧ください。
http://www7b.biglobe.ne.jp/~river_r/bm/AveRage.html Vimにデフォルトでシンタックスハイライトがない言語gnuplot Windows版 5.2.8の3次元図での問題。
マウスでドラッグすると座標軸が多数表示されて重なってしまう。
これってバグ? それともパラメータ設定で回避できるの?
ver4.xあたりではこういう問題は発生してなかったと思う。 誰か答えてあげて
うちとこはWindows版使ってないからわからない splotをPNGとかの2dイメージではなく
3dでfile出力する事って可能ですか? set xlabelとかで、ラベルの途中に改行を入れた時の
行間というか改行幅って調節できるんですかね?
2行目以降をset labelで細かく位置を調節すれば
色々自由にできるとは思いますが、
ちょっと行間を詰めたいだけなので、
簡単に設定できると嬉しいと思いまして。 とあるスクリプトからパイプでgnuplotにコマンド送ってイメージファイル作らせたりしてるんだけど、Ctrl+Cで中断させようとすると、スクリプトは終わるのにgnuplotは終わらずにエラーメッセージ吐いたりする。
gnuplotがSIGINT受けても止まらないせいだと思うんだけど、何かの設定で止まるようになんないかな。
ソース眺めてみたけどよーわからん。
OSはLIinux。
って誰もみてないか。 おお、ありがたや。
perlの例だけど、openでgnuplotにパイプをつないで、
コマンドとインラインデータを流し込む。
例えばこんな風。
↓ for my $k (1 .. 200){
my $file = sprintf 'file%03d', $k;
my @xdata = (1 .. 300);
my @ydata;
push @ydata,rand 1 for(0 .. 300);
open my $fh, '|-', 'gnuplot';
print $fh <<EOD;
set term postscript eps
set output "$file.eps"
plot "-" w l
EOD
for my $i (0 .. $#xdata){
print $fh "$xdata[$i]\t$ydata[$i]\n";
}
print $fh "e\n";
}
プロットするデータはここでは乱数で作ってるけど
実際は実験データとかを取り込んだもの。 あら、インデントは消えちゃうのね。
ひと組300行のデータからイメージファイルを作って、
それをループで回して200回も繰り返すからそれなりに時間がかかって、
途中でCtrl+Cで止めようとするとperlは止まるんだけど、
gnuplotは止まらず混乱?してplotのインラインデータ部分を
コマンドとして解釈してエラーメッセージを出したり、
タイミングによってはepsファイルに行くべき文字列が
stdoutに出てきたりする。 再現しないよ
783を例えばhogeというファイル名で保存して
$ ./hoge
途中,Ctrl+Cするとgnuplotも止まる ゴメンゴメンperlが止まってエラーが出てないだけだった
外側のfor消して300の乱数データを時間が掛かるように適宜大きくしたら
以下のようなエラーが出た
...
gnuplot> 168373
^
line 160265: invalid command
gnuplot> 168374
^
line 160265: invalid command
... Androidに移植されたgnuplotいくつかあるみたいだけど、使ってる方でおすすめのあります?
以前は、Droidplot + android terminal emulator つてのを使ってたけど、ずっと更新されずAndroid9ではgoogle playに出てこなくなっちゃった 神ツールgnuplotが末長く神ツールでありつづけますように 制御構造入れたプロットをしたいなら
スクリプトからgnuplotに食わせるより、雛形だけepsに吐かせてpsコードで書いた方がずっと楽よ
行列演算も組み込みだし数値扱うなら多分perlより使える言語 データ読み込みから画像生成までpostscriptに任せられるのはtsv/csvまでだな
readline、substringで分割、cvr(conv to real)、dict/arrayに突っ込むだけ
10/16進数値以外は読めないので汚いデータはpsのregex(要外部ライブラリ)とか使うより前処理した方が楽かと
あとgnuplotのようにlatex記法をサポートしてないので、gnuplotの吐くepsから拾うか、
./makeplot.ps dat1 dat2 ...のように動的に数式を生成するコマンドにしたいなら、psからgnuplot -eやtexコマンドを外部呼び出しして出力を読み込むか
あれ、意外とめんどくさそう… 逆にgnuplotをpsライブラリだと捉えよう、手動でスタイル合わせるより馴染むし
gsなら%pipe%cmdがファイルハンドル返したり%stdin, %stdout使えて楽 gnuplotでもpython matplotlibでも最近はsvgはかせる。
svgならブラウザでviewできるし。仕上げはinkscape。 1/3ごろ gnuplot 5.4.3 がでてます。
数時間Windowsバイナリもアップされています。 パラメータ変えてplotコマンド打っても描画が新しくならないんだけど、なんでだろ? >>796
debian sidでgnuplot-x11の方です
gnome41でwaylandな環境なんてすが
同じlinuxなでもxfce4にxorgのマシンだと問題ないんです
waylandのせいかと思うんですが。
まぁ使えないわけじゃないけど、微妙に使い勝手悪いです。。 >>797
wxtターミナルではどうですか?
x11やqtターミナルはドライバープログラム(gnuplot-x11やgnuplot-qt)
が描画するけど
wxtはgnuplot本体が描画するから、違いがあるかも。
後,
Xと通信しない非対話型ターミナルではどうなんでしょう。
例えば
set terminal png
set output 'test1.png'
a=1
plot a*x
set output
set output 'test2.png'
a=2
plot a*x
set output
はちゃんと動作しますか? >>798
ありがとうございます。
起動するとデフォルトがwxtで、そちらだとたとえば
gnuplot > plot sin(x)
でサイン関数が描画され、次に
gnuplot > plot cos(x)
と続けて打ってもサイン関数のプロットのままで
ウィンドウがアップデートされません。
ウインドウをグラブして拡大したりするとアップデートされます。
terminalに関しては試してなかったので、
termをx11にしたところ、上の例だとcos(x)を新たにプロットするとちゃんとウインドウも再描画されました。あとpngとかpostscriptでも問題ないので
どうやらwxtの問題みたいです。
debianとかgnome4x系になってまだ間もないのでなにかのバグの可能性もあると思いましたが、他に報告が無いみたいなので自分の環境のせいかもしれないです。
とりあえずtermがx11だと問題ないのがわかったのでそれで使っていようと思います。
ありがとうございました、助かりました replotでも再描画されないです
ウインドウの属性が変わらないとアップデートされないので、gnomeのバグかもしれないです gnuplot-qt on Debian bullseye は大丈夫だよ 最新のtestingのisoを使ってsidにクリーンインストールしたんですけど、qt版はたしか動かなかったです。基本、bullrsdys+って感じだと思います。
他のtesting入れてるマシンではqt版使ってて問題なかったので、試しにx11版に変えてみましたが、問題なしです。
こっちのマシンはずっとtestingで運用してるのでdisplay protocolはxorgのままです。
なんかwaylandとgnome4x系の問題な気がしてきました。 linuxはあまり使わないのでよくわかりませんが、linuxなら開発者のEthan氏が勧めるようにqt ターミナルがいいと思います。
動かないなら仕方ないけど。
linuxなら自分でビルドするのもそれほど苦ではないと思うのでqtターミナル、トライできないかな? windows11,WSL2,WSLg,gnuplot-5.4.3で
qtだと文字列の末尾が数字の1だと表示がずれる
wxtだと閉じるボタンだけで最大化、最小化ボタンが表示されない
原因がわかる方いますか? 色んな出力対応してるんだから片っ端から試して上手く動くの使えばいいよ、プレビュー用途ならなおさら こんなんあるんですね。知らなかった。つかって見よう。
A Jupyter/IPython kernel for Gnuplot
https://github.com/has2k1/gnuplot_kernel >>806
状況がよくわかりません。wslならgnuplotはlinuxアプリですか?
それともwindowsアプリをwslのterminal上でつかっているのですか。
状況を再現するコマンドやスクリプトを書いてください。 >>806
qtの方は意味不明のままですが、wxtの方はwxtターミナルのプロットウィンドウの右上部に並ぶ
− □ × (それぞれ「最小化」、「最大化」、「閉じる」の動作を)ボタンのうち−、□(最小化、最大化)ボタンが表示されないということかと。 >>806
gnuplotは5.4.3 のlinuxバイナリということで、windows11,wsl2,wslgだということですね。
gnuplotの問題なのですか?wslgの問題かも知れません。VcXsrvもいれてみてこちらでも試してみてはいかがでしょうか。 Windows上でのpngcairoターミナルでフォントの表示の乱れがbug ticketに上がっています。
# pngcairo: uppermost pixel in key, label etc missing
https://sourceforge.net/p/gnuplot/bugs/2512/
# Bad kerning with pngcairo and gnuplot 5.4.1
https://sourceforge.net/p/gnuplot/bugs/2397/
どちらもpangoライブラリが関係しているようです。
Ethanさんはpangoのフォントやバージョンを変えてみればいわれたので
色々なバージョンpangoをビルドして、ライブラリ置き換えてみましたが大きな改善はしませんでした。
また、windows上のpangocairoは既定ではWindows nativeのバックエンドを使っています。
環境変数PANGOCAIRO_BACKENDをfcにセットすることにより、バックエンドをfontconfig
にすることができます。
この作業がworkaroundとして現状有効の様です。 brewからgnuplotインストールしたいんだけど、4時間以上やってもまだ終わらない
異常?正常? うちの環境Macだけど確か1日くらいかかった
なんやかんやライブラリ、アホほどインスコされたよ プロットするデータの個数によって、with linesとwith pointsを自動切換えできないでしょうか?
多くのデータファイルから自動で2Dプロットを作成しています。
基本的には
plot "file.dat" with lines
でスッキリした線だけのプロットを描くのですが
たまにX,Yのデータが1組しかないファイルがあり
その場合プロットが目に見えない点だけになってしまいます。
そこでファイル中にデータが1組しかない時は
plot "file.dat" with points
に自動的に切り替えてくれるとありがたいです。
設定やplotコマンドの書き方でなんとかならないでしょうか?
もしくは、データファイルの書き方で1組のX,Yデータでも
目に見えるポイントを出す方法があればそれでもいいです。 >>818
無いな
スクリプト組んで記述を変えるのが正解だと思う そっかー
マニュアル読み込んでみても確かにできる気がしない あるいは with linespoints とか? >>818
stats とif でできるかな。
データがないときはSTATS_recordsはUndefined になることに注意して
(インデント消えるとおもうから,適当に足してくれ)
stats 'data.dat' nooutput
if (STATS_records == 1) {
plot 'data.dat' with points
} else {
plot 'data.dat' with lines
} statsうまくいきました!ありがとう!
統計情報なんて気にもとめてなかった。
ちなみにデータない時はエラーになって、STATS_recordsは元のままですね。
(初回ならundefined)
米澤先生のサイトはブックマークしてあったけど、忘れてた。。。 5.0系だとログスケールの時にstatsがエラーになるという謎仕様。
5.2以降だと大丈夫みたいだけど、うちの環境だと使いたい端末がインストールができないorz
ところで5chの仕様変更でのせいか輪をかけて過疎化してるね >>828
> 5.0系だとログスケールの時にstatsがエラーになるという謎仕様。
そうなんですか。しかし,5.0系とは懐かしいですな。
> 5.2以降だと大丈夫みたいだけど、うちの環境だと使いたい端末がインストールができないorz
5.2でインストールできない terminal なんてなんでしょう。5.2でdeprecateになったterminalなのでしょうか。 >>830
あ、ウチ環なので一般的な話じゃないです。
LinuxやらSolarisやらMacやら、OSバージョンも複数あって
インストールされてるライブラリもまちまちで
どのマシンでも同じバージョンのgnuplotを動かそうとすると
ライブラリが足りなくてmake失敗したりとか。
今んとこ全部のマシンで成功したのが5.0系というだけの話。 set term qt widget <id>
の<id>って何を指定すればいいのかな?
他のアプリのウィンドウに表示できそうなんだけど違うのかな?
マニュアルみてもよくわからない。
x11なら
set term x11 window "<string>"
でウィンドウIDを指定すれば別アプリに表示させられるから
Qtでも出来そうな気がするんだけど違うかな。 そんな機能があったのね
douyatte使うんだ? じぶんはTcl/TkのGUIアプリでウィジェットにgnuplotを表示させてます。
んでTkのscaleをぐりぐりするとグラフがぐりぐり動きます。
Tkinterならwinfo_idで出来そう 5.4.4beta (5.4.4 のプレリリース)が出てます。
しばらくしたら,正式に5.4.4がリリースされるでしょう。 >>841 5.4.4 の変更Gnuplot Q&A 掲示板を見てください。 New gnuplot subsystem "watchpoints"
開発版で実装されます。
gnuplot beta MLの当該ポストのアーカイブのURLです。
https://sourceforge.net/p/gnuplot/mailman/message/37703162/ ↑途中で失礼しました。
>>845
この実装をONにした開発版Windowsバイナリを以下に置いてます。
demo ディレクトリ下の watchmouse.dem, watchpoints.dem を実行してみてください。 >>849
watchpoints.demの結果をpdfにしてみました。
(watchmouse.demはマウスを動的に使って試すので略)
http://tmacchant33.starfree.jp/Files/watchpoits.pdf ある数値aとbがあるとき、a±bを横長の帯として表したいんだが、どうしたらシンプルに実現できるかな?
0 a b
0.1 a b
...
というファイルを作ってwith filledcurveでプロットすればそれらしく見えると思うけど、中間生成物を沢山作りたくない >>852
回答ではないかもしれないけどファイル作りたくないならデータブロックをりようすればよいのでは
$data << EOF
0 a b
0.1 a b
EOF >ある数値aとbがあるとき、a±bを横長の帯として表したい
伝わらん >>854
すみません
>>855
そうです
横軸をx軸と呼ぶことにして、>>852で書いた数値a、bはxによらないということです
で、xによらない定数値としてグラフに描画したいということです
定数aを描画したいだけなら plot a で良いのですが、これにエラーをつけるにはどうしたら良いですかと言い換えることもできます sidのGnuplotなようやく修正されたぞ
チラ裏 >>857
はい。
x軸方向のエラーバーではなく、y軸方向の定数値±定エラーバーを全てのxに渡って表示したいです >>859
こういうこと?
$ cat data.dat
0 -1 2
0.1 -1 2
0.2 -1 2
$ cat plot.gp
set xrange [-.1:.3]
set yrange [-2:3]
plot 'data.dat' u 1:2:3 with filledcurves
pause -1
$ gnuplot plot.gp >>860
そうです
任意の面積の塗り潰しがやりたいことです >>861
860を実行すると塗りつぶした長方形となるんだが,やりたいのはそれなの。
yの値がxに依存する場合も考えるのかな?
x, yのデータが与えられてぬりつぶしの幅を簡単に変えたい。
データの第3列目に書くのは面倒。
こんなことでいいですか? >>865
> 860を実行すると塗りつぶした長方形となるんだが,やりたいのはそれなの。
>>861で申したように、そうです
それを中間ファイルを用意せずにやりたいということです
> yの値がxに依存する場合も考えるのかな?
>>856,859で申したように、yもエラーの幅も横軸に依存しません
> x, yのデータが与えられてぬりつぶしの幅を簡単に変えたい。
> データの第3列目に書くのは面倒。
> こんなことでいいですか?
いいえ
与えられるのは定数値a、bだけです
aはいわば中央値を、bはいわばエラーの幅を表します
これらは定数なので、xによりません
したがって、わざわざ
x y ye
なるフォーマットのファイルを用意するのが面倒だというのが>>852で申したことです おそらく>>860は回答のつもりで「こういうこと?」と聞いていて、質問者>>861は見た目のつもりで「そうです」と言っているのですれ違いが起きている。
で、>>861の「任意の面積」とは流れを踏まえれば明らかに「任意の矩形」という意味だが>>865 (>>860,862,867あたりと同じ人だろう) は額面通りに受け取ってしまったばかりにxに依存する何かを想定している。
視点によっては回答者が文盲にも見えるし質問者が問題を抱えているようにも見えるのだろう。 >>869 は間違い。
ただ単にfiledcuvesと使うと中心がaにはならないみたいだがあとは自分でやってくれ。
# begin
a=-1
b=2
set print $data
do for [i=0:10] { print 0.1 * i}
unset print
set xrange [-.1:1.1]
set yrange [-2:3]
plot '$data' u 1:(a):(b) with filledcurves
set terminal pngcairo
set output '852_02.png'
replot
set output
set terminal @GNUTERM
# end
http://tmacchant33.starfree.jp/Files/852_02.png >>871
それはdataなるファイルを作ってるからお題にそぐわないのでは? あと、ファイルを作ってfilledcurveする案で妥協するなら、わざわざ中間の点を打つ必要はないと思う
両端だけ決めてfilledcurveするので十分 >>872, 873
>それはdataなるファイルを作ってるからお題にそぐわないのでは?
それはそうなんですが
外側にファイルを作らなければ実際上そう面倒にならない。
中間ファイルの役割をスクリプトの中に実現すために
データブロックがgnuplotに実装されたのだから
それを使って実現しても実際上そんなに問題でないとおもいます。
> 両端だけ決めてfilledcurveするので十分
それ書き込んでから気づきました。 中間ファイルが嫌ならスクリプトに含めりゃええがな
>>871を書き換えるなら
$ cat plot.gp
a=-1
b=2
set xrange [-.1:1.1]
set yrange [-2:3]
set terminal pngcairo
set output '852_02.png'
plot '-' u 1:(a):(b) with filledcurves
0
1
$ gnuplot < plot.gp 5.4.5 のβリリースがでました。
https://sourceforge.net/p/gnuplot/mailman/message/37712536/
Changes in 5.4.5
================
* NEW "set key offset <dx>, <dy>" tweaks placement of the key
* NEW data-driven histogram colors (variable color from extra using column)
* CHANGE re-order drawing 3D labels to come after pm3d depthorder surfaces
* CHANGE hpgl: add terminal option "fontscale <value>"
* CHANGE for nonuniform matrix data, column(0) returns linear position in matrix
* CHANGE set pointintervalbox 0 disables drawing the background box Bug #2544
* FIX svg: hypertext font handling
* FIX track columnheaders of multiple data blocks in a single file Bug #2538
* FIX Clean up positioning of polar border, raxis, and theta tics Bug #2130
* FIX Autoscaling of logscaled raxis
* FIX memory corruption if a small plot structure is recycled Bug #2550
* FIX regression in 5.4.4 - promotion of string to integer should
should not assume that a leading 0 means octal Bug #2551
* FIX Windows qt: "pause -1" should not block mousing Bug #2549 重要なバグ修正があるので年末予定のスケジュールを早めてgnuplot 5.4.5 がリリースされました。
Windowsバイナリもアップロードされています。
https://sourceforge.net/projects/gnuplot/files/gnuplot/5.4.5/ C++からデータをパイプでgnuplotに流し込むことを考えています
以下のソースはLinuxではうまくいったのですが
mingwでビルドしてWindowsで実行するとうまく行きません
(ソース分けます)
#include <string>
#include <cstdio>
#include <memory>
#include <ctime>
#include <map>
#include <cmath>
using namespace std;
using Series = map <double, double>;
static const double pi (acos (-1));
static const double MIN (0), MAX (pi * 4);
static const double INTERVAL ((MAX - MIN) / 100);
static const double PHI (0);
static const double OMEGA (pi / 8);
static const double DURATION (2); (続き)
int main ()
{
string gnuplot_path ("gnuplot");
FILE fp (popen (gnuplot_path.c_str (), "w"));
if (!fp)
return -1;
fprintf (fp, "reset\n");
fprintf (fp, "set yrange [-1:1]\n");
clock_t time0 (clock ());
for (double second (static_cast <double> (clock () - time0) / CLOCKS_PER_SEC);
second < DURATION; second = static_cast <double> (clock () - time0) / CLOCKS_PER_SEC) {
Series series;
for (size_t i (0), last ((MAX - MIN) / INTERVAL); i < last; ++ i) {
const double x (MIN + i * INTERVAL);
series.insert (make_pair (x, sin (x - PHI + OMEGA * second)));
}
fprintf (fp, "set title 't = %1.2f'\n", second);
fprintf (fp, "plot '-' title 'sin' with lines\n");
for (const Series::value_type &point: series)
fprintf (fp, "%f %f\n", point.first, point.second);
fprintf (fp, "e\n");
fflush (fp);
}
pclose (fp);
return 0;
} >>887
mingw gnuplotの5.4はpipeの扱いにバグがあります.
最近修正されたのですがリリース版修正されるのは次のリリース(5.4.6)になります.
5.2のgnuplotを使うか 890 途中でかきこんでしまいました.5.2.xを使うか5.5(開発版)を使うかです.
5.5(開発版)のバイナリは以下
http://tmacchant33.starfree.jp/gnuplot_bin.html >>890,891
有難うございます
試してみまするる >>890,891
このあとエラーとgnuplotのバージョン情報を貼ろうと思ったのですが
昨夜は全然書き込めなくなりました
バージョンはご懸念の通り5.4 patchlevel 5になります
不完全な書き込みにも関わらず情報提供をありがとうございます >>890,891
ビンゴでした
Windows版は5.2.8にしたら意図通り動作しました
(ちなみにLinuxで動作していたのはDebianのstableのやつで5.4.1でした
5.4系列でパイプに問題があるのはWindows版だけかもしれません)
不完全な情報からご回答を頂きまして本当に有難うございました Windowsで
tail -f hoge.gp | gnuplot
のようにしたいのですが
tail -fのように使えるコマンドってありますか?
スレ違いのような気もしますが一連ってことでお聞きします pwshで以下のようにして出来ました
gc hoge.gp -tail 1 -wait | gnuplot msys2 や busybox-win32 などを使うのも手だと思います. >>897
有難うございます
なるほどmsys2にtailが入ってるだろうから
それでも良さそうですね Gnuplot plans: the start of version 6
https://sourceforge.net/p/gnuplot/mailman/message/37747332/
ソースのクローンの方法
git clone -b branch-6-0-stable git://git.code.sf.net/p/gnuplot/gnuplot-main
なお,5.4.6は2023年初旬にリリースされるようです. 今年後半から開発版(5.5)に入ったwatch points, polar grid とfunction blockが入るのは (途中ですみませんでした.)
が入るのは間違いないでしょう.いずれも魅力的な改変です.
6.0.0alphaにはsharpenという機能が入りました. 現バージョンって、プロシージャ的なプロットってできるんでしたっけ?
新しく機能追加するならそういうのの気もする プロシージャ的なプロットいう言葉がPython 的な関数ブロックで定義された
関数をプロットすることなら,最近開発版に実装されたfunction block ですね
6.0.0ではこれがリリース版で使えるようになります 6.0.0alphaのマニュアルのスナップショットを挙げておきます.
http://tmacchant33.starfree.jp/Files/gnuplot600alpha20221212.pdf
p24のNew features in version 6
を見ると新しい機能がわかります. >>905さん
ありがとうございます。
自分が書いたプロシージャ的というのは、L-systemで表現されるみたいなルールベースのプロットという意味です
function blockを見てみましたがコードのモジュラー化みたいで、自分の思ってたのとは違うみたいでした。
でもこんな機能があるの初めて知りました
まぁ他の言語で数値を得て描画だけさせるという方法で可能だし、ソフトウェアの複雑化という意味で変な可能は実装しないほうが良いのかもしれないですが。 竹の先生のページに最新の開発版の情報が紹介されています
整理されて書かれていますのでぜひご覧ください
http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/gpinfo-2023.html#info-20230125 >>909
関数いいな
もうgnuplotだけで立派なプログラム書けそうだな
CGライブラリの充実したスクリプト言語 CGに強いスクリプト言語としてpostsciptに勝つには、あとは関数型プログラミングサポート(高階手続き)や名前空間、評価環境だろうけど
この辺の言語設計の基礎に手を入れると既存のスクリプトが色々壊れそうだから、やりすぎかね? 5.4.6が来週にはリリースされるようです.
5.4のいやバージョン5のラストリリースになる予定です.
https://sourceforge.net/p/gnuplot/mailman/message/37775397/
Changes in 5.4.6
================
* NEW set key {columns <exact no of columns>}
; set key {keywidth <exact width>}
* NEW XDG support
; startup file: $XDG_CONFIG_HOME/gnuplot/gnuplotrc
; history file: $XDG_STATE_HOME/gnuplot_history
; wxt configuration: $XDG_CONFIG_HOME/gnuplot/gnuplot-wxt.conf
* CHANGE remove "alldoc" build target
* CHANGE plot with polygons fillstyle empty really does mean empty
* FIX windows: various problems mixing piped input and stdin Bug #2491
* FIX x11: bad interactions of lt nodraw, bgnd and dash pattern Bug #2572
* FIX wxt: export-to-file widget should preserve line properties
* FIX svg: set initial default fill to "none"
* FIX png: back-compatibility with very old versions of gdlib Bug #2579
* FIX variable pointtype, pointsize in plot style yerrorlines
* FIX border color for polygons with variable fillcolor
* FIX definition followed by iteration in a plot command Bug #2580
* FIX parametric plot with filledcurves y1=<limit> Bug #1797 Gnuplot Q&A 掲示板 3537 に 5.4.6 のNEWSの訳読めます 5.4.6でXDGがサポートされましたが,wxGTK が2.8の場合うまくビルドできないようです.
https://sourceforge.net/p/gnuplot/bugs/2587/
開発版では修正済みだったのですが5.4.6へのXDGサポートのバックポート時に
反映されていなかったようです.
というわけで5.4.7が出るようです 開発版のgnuplotをUbuntu(22.04)上でビルドする手順をまとめました
Debian系なら似たような手順を使えると思います
https://sourceforge.net/p/gnuplot/support-requests/282/ >>911
そりゃスクリプト言語としてはpostscriptの方が優れてるし、言語仕様もしっかりしててドキュメントも多い
しかし誰でも何となくで書けるalgol-likeな言語であることが何よりも重要なんだわ >>911 >>918
gnuplotはスクリプト型のグラフ作成ソフトでpostscript言語とは目指してるものが違うように思います.
比べるならばpython のmatplotlibでしょうか.
私は勝負グラフはmatplotlibに移行しました.
ただ,通常のプロットはgnuplotが手軽で利用しています. 5.4.6 Windows バイナリにfontconfig 関係のファイルを含むようにしました.
PANGOCAIRO_BACKENDをfontconfig(fc)に設定するときの警告をなくすためです コルーチン、スレッド/プロセス管理、高階手続き、例外機構などpsの先進的だった機能もpython3系で追い付かれた感があるわな
当然エコシステムでも敵わないから、psの書き手はますます減りそうで寂しい yieldとかあったな、本当に先進的
俺はgnuplotに吐かせたpsコードに引数処理、与えたファイルとストリームの読み書き、素直なデータのパースを書き加える程度
単に他の言語でラッパを書くとファイルが増えて面倒という理由だけど 皆さんpsの高度な機能使ってるんですね
自分は作成したらプリントするか、ベクター系のソフトで編集する位だけど、他の皆さんかどういう用途で使ってるのか想像つかないです なるほど
フラクタルとか、難しい数式をビジュアル化するとか面白そうですね 標準配布のgnuplot環境には大抵ps処理系(組み込み、gs等インタプリタ)が含まれてるから確かに昔は重宝したけ
今のPC環境なら選択肢は無数にあるから好きな言語選べば良いと思うけどね 開発版の新機能について竹の先生が紹介されています.
http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/gpinfo-2023.html#info-20230407 5.4.7testing がでました
Changes in 5.4.7
================
* FIX pseudofiles '+','++' must ignore "set datafile columnheader" Bug #2585
* FIX data from an array must ignore "set datafile columnheader" Bug #2585
* FIX various problems with unbounded plot iteration Bug #2589
* FIX allow plot ... smooth acsplines with filledcurves Bug #2592
* FIX "plot title at {end|beginning}" belongs in KEYSAMPLE layer
* FIX handle empty string in last field of csv file
* FIX Handle nonlinear axes during contour generation Bug #2593
* FIX yerrorbars key sample should match bars in the plot Bug #2598
* FIX "plot with table" must skip all smoothing operations Bug #2610
* FIX cairolatex/epslatex: prevent doubled text in opaque textboxes
* FIX wxt: versions prior to 3.0 do not support XDG Bug #2587
* FIX wxt: fontscale and fontsize handling was inconsistent Bug #2373
* FIX tikz epslatex cairolatex: updated to work with TeXLive2023 Bug #2613
* FIX correctly report cardinality of an empty array is zero Bug #2616
* FIX ignore datafile separator when plotting from an array
* FIX combination of pm3d options "at b" or "at t" with "depthorder"
* FIX combination of 'autotitle columnhead' and 'using col("key")' Bug #2620
* FIX do not complain if XDG files are not found because no $HOME Bug #2623
* FIX windows terminal: arrow length corrected for aspect ratio Bug #2565 gnuplot 5.4.7 がリリースされました
https://sourceforge.net/projects/gnuplot/files/gnuplot/5.4.7/
これが今度こそ最後にVer.5のリリースとなり,次は6.0.0になると思います `kittycairo` terminalが現在の開発版にくみこまれました
+" The `kittycairo` terminal generates in-window output on terminal emulators",
+" that support the kitty graphics protocol. The actual drawing is done via",
+" cairo, a 2D graphics library, and pango, a library for text rendering.",
+" The kitty protocol is an alternative to sixel graphics, with the advantage",
+" of support for 24-bit RGB colors and slightly lower required bandwidth to",
+" transfer the image data between computer and terminal in a remote session.",
+"",
+" Syntax:",
+" set terminal kittycairo",
+" {{no}enhanced} {mono|color}",
+" {font <font>} {fontscale <scale>}",
+" {linewidth <lw>} {rounded|butt|square} {dashlength <dl>}",
+" {background <rgbcolor>}",
+" {size <XX>,<YY>} {anchor|scroll}",
+"", +" This terminal processes labels and other text using enhanced formatting",
+" by default. See `enhanced`.",
+"",
+" The width of all lines in the plot can be modified by the factor <lw>",
+" specified in `linewidth`. The font size can similarly be uniformly modified",
+" the scale factor provided by `fontscale`. For discussion of font and text",
+" encoding options, see the `pdfcairo` terminal."
+"",
+" The option `rounded` sets line caps and line joins to be rounded;",
+" `butt` is the default, producing butt caps and mitered joins.",
+"",
+" The size of the plot is given in screen pixels. By default each plot is",
+" drawn starting at the current cursor position and scrolls with the terminal",
+" text. `anchor` instead pins each plot to the top left of the terminal window.",
+" This is useful for animation or pseudo-mousing using the keyboard",
+" (see `pseudo-mousing`).", 5.4.8がでました.5.4.7でバージョン番号の扱いに誤りがあってその修正だけです. [0:26+2/3]の範囲で
- 0.4 * x + 48
と
64-x
で囲まれた領域を描画したいです。
plot sample [0:26+2/3] 64 - x with filledcurves above - 0.4 * x + 48 fc "yellow" notitle
と入力すると、
unexpected or unrecognized token: -
というエラーが出てきます。どのへんがおかしいでしょうか >>933
>unexpected or unrecognized token: -
なんてでないよ >934
そうですか。私の環境のせいかもしれませんので、少し調べてみます。
ありがとうございました。 うちの環境は同じメッセージでたよ
aboveと0.4の間のマイナスのとこだって plot [0:26+2/3] 64-x with filledcurves x1 fc "yellow" notitle, - 0.4 * x + 48 with filledcurves x1 lc "white" notitle
とかかな? gnuplot-6.0.0 が2023の12月末にでています 今日は買い時じゃないか
IDなしだから
昨シーズン運が良かったんじゃないのにあかんのに
よくそんな意味でのコメント ありゃ最低や >>938
multiplotの各プロットでreplotとかできるらしいのは良さげ。
ただTcl/TkとかでGUI作ってそっちにplotした方が柔軟性はある。x11限定だけど。
x11以外にもそういうこと(出力先を別アプリのウィンドウにする)できるのあるのかなぁ。 6.0.0のWindowsバイナリがリリースされました レス数が900を超えています。1000を超えると表示できなくなるよ。