gnuplot を使おう。 その3
* 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がリリースされるでしょう。 read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる