X



gnuplot を使おう。 その3
0778名無しさん@お腹いっぱい。
垢版 |
2021/03/15(月) 20:29:07.36
set xlabelとかで、ラベルの途中に改行を入れた時の
行間というか改行幅って調節できるんですかね?

2行目以降をset labelで細かく位置を調節すれば
色々自由にできるとは思いますが、
ちょっと行間を詰めたいだけなので、
簡単に設定できると嬉しいと思いまして。
0779名無しさん@お腹いっぱい。
垢版 |
2021/06/04(金) 07:23:10.50
とあるスクリプトからパイプでgnuplotにコマンド送ってイメージファイル作らせたりしてるんだけど、Ctrl+Cで中断させようとすると、スクリプトは終わるのにgnuplotは終わらずにエラーメッセージ吐いたりする。
gnuplotがSIGINT受けても止まらないせいだと思うんだけど、何かの設定で止まるようになんないかな。
ソース眺めてみたけどよーわからん。
OSはLIinux。

って誰もみてないか。
0782名無しさん@お腹いっぱい。
垢版 |
2021/06/07(月) 20:38:57.59
おお、ありがたや。
perlの例だけど、openでgnuplotにパイプをつないで、
コマンドとインラインデータを流し込む。
例えばこんな風。
0783名無しさん@お腹いっぱい。
垢版 |
2021/06/07(月) 20:39:26.83
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";
}
プロットするデータはここでは乱数で作ってるけど
実際は実験データとかを取り込んだもの。
0784名無しさん@お腹いっぱい。
垢版 |
2021/06/07(月) 20:40:30.07
あら、インデントは消えちゃうのね。

ひと組300行のデータからイメージファイルを作って、
それをループで回して200回も繰り返すからそれなりに時間がかかって、
途中でCtrl+Cで止めようとするとperlは止まるんだけど、
gnuplotは止まらず混乱?してplotのインラインデータ部分を
コマンドとして解釈してエラーメッセージを出したり、
タイミングによってはepsファイルに行くべき文字列が
stdoutに出てきたりする。
0786名無しさん@お腹いっぱい。
垢版 |
2021/06/08(火) 13:19:49.14
ゴメンゴメンperlが止まってエラーが出てないだけだった
外側のfor消して300の乱数データを時間が掛かるように適宜大きくしたら
以下のようなエラーが出た

...
gnuplot> 168373
^
line 160265: invalid command


gnuplot> 168374
^
line 160265: invalid command
...
0787名無しさん@お腹いっぱい。
垢版 |
2021/09/07(火) 10:43:47.41
Androidに移植されたgnuplotいくつかあるみたいだけど、使ってる方でおすすめのあります?

以前は、Droidplot + android terminal emulator つてのを使ってたけど、ずっと更新されずAndroid9ではgoogle playに出てこなくなっちゃった
0789名無しさん@お腹いっぱい。
垢版 |
2022/01/11(火) 07:21:41.62
制御構造入れたプロットをしたいなら
スクリプトからgnuplotに食わせるより、雛形だけepsに吐かせてpsコードで書いた方がずっと楽よ
行列演算も組み込みだし数値扱うなら多分perlより使える言語
0790名無しさん@お腹いっぱい。
垢版 |
2022/01/11(火) 08:41:38.40
データ読み込みから画像生成まで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コマンドを外部呼び出しして出力を読み込むか

あれ、意外とめんどくさそう…
0791名無しさん@お腹いっぱい。
垢版 |
2022/01/11(火) 15:39:58.80
逆にgnuplotをpsライブラリだと捉えよう、手動でスタイル合わせるより馴染むし
gsなら%pipe%cmdがファイルハンドル返したり%stdin, %stdout使えて楽
0797名無しさん@お腹いっぱい。
垢版 |
2022/01/21(金) 23:28:36.37
>>796
debian sidでgnuplot-x11の方です
gnome41でwaylandな環境なんてすが
同じlinuxなでもxfce4にxorgのマシンだと問題ないんです
waylandのせいかと思うんですが。
まぁ使えないわけじゃないけど、微妙に使い勝手悪いです。。
0798名無しさん@お腹いっぱい。
垢版 |
2022/01/22(土) 06:34:00.66
>>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

はちゃんと動作しますか?
0799名無しさん@お腹いっぱい。
垢版 |
2022/01/22(土) 22:50:07.85
>>798
ありがとうございます。
起動するとデフォルトがwxtで、そちらだとたとえば

gnuplot > plot sin(x)
でサイン関数が描画され、次に
gnuplot > plot cos(x)
と続けて打ってもサイン関数のプロットのままで
ウィンドウがアップデートされません。
ウインドウをグラブして拡大したりするとアップデートされます。
terminalに関しては試してなかったので、
termをx11にしたところ、上の例だとcos(x)を新たにプロットするとちゃんとウインドウも再描画されました。あとpngとかpostscriptでも問題ないので
どうやらwxtの問題みたいです。
debianとかgnome4x系になってまだ間もないのでなにかのバグの可能性もあると思いましたが、他に報告が無いみたいなので自分の環境のせいかもしれないです。
とりあえずtermがx11だと問題ないのがわかったのでそれで使っていようと思います。
ありがとうございました、助かりました
0801名無しさん@お腹いっぱい。
垢版 |
2022/01/23(日) 00:19:56.20
replotでも再描画されないです
ウインドウの属性が変わらないとアップデートされないので、gnomeのバグかもしれないです
0803名無しさん@お腹いっぱい。
垢版 |
2022/01/23(日) 14:20:36.70
最新のtestingのisoを使ってsidにクリーンインストールしたんですけど、qt版はたしか動かなかったです。基本、bullrsdys+って感じだと思います。

他のtesting入れてるマシンではqt版使ってて問題なかったので、試しにx11版に変えてみましたが、問題なしです。
こっちのマシンはずっとtestingで運用してるのでdisplay protocolはxorgのままです。
なんかwaylandとgnome4x系の問題な気がしてきました。
0804名無しさん@お腹いっぱい。
垢版 |
2022/01/24(月) 16:19:00.47
linuxはあまり使わないのでよくわかりませんが、linuxなら開発者のEthan氏が勧めるようにqt ターミナルがいいと思います。
動かないなら仕方ないけど。
linuxなら自分でビルドするのもそれほど苦ではないと思うのでqtターミナル、トライできないかな?
0806名無しさん@お腹いっぱい。
垢版 |
2022/02/03(木) 16:50:49.59
windows11,WSL2,WSLg,gnuplot-5.4.3で
qtだと文字列の末尾が数字の1だと表示がずれる
wxtだと閉じるボタンだけで最大化、最小化ボタンが表示されない
原因がわかる方いますか?
0808名無しさん@お腹いっぱい。
垢版 |
2022/02/11(金) 15:56:00.88
色んな出力対応してるんだから片っ端から試して上手く動くの使えばいいよ、プレビュー用途ならなおさら
0810名無しさん@お腹いっぱい。
垢版 |
2022/02/19(土) 15:01:51.77
>>806
状況がよくわかりません。wslならgnuplotはlinuxアプリですか?
それともwindowsアプリをwslのterminal上でつかっているのですか。
状況を再現するコマンドやスクリプトを書いてください。
0811名無しさん@お腹いっぱい。
垢版 |
2022/02/19(土) 20:44:09.30
>>806
qtの方は意味不明のままですが、wxtの方はwxtターミナルのプロットウィンドウの右上部に並ぶ
− □ × (それぞれ「最小化」、「最大化」、「閉じる」の動作を)ボタンのうち−、□(最小化、最大化)ボタンが表示されないということかと。
0812名無しさん@お腹いっぱい。
垢版 |
2022/02/19(土) 20:45:34.46
>>806
gnuplotは5.4.3 のlinuxバイナリということで、windows11,wsl2,wslgだということですね。
gnuplotの問題なのですか?wslgの問題かも知れません。VcXsrvもいれてみてこちらでも試してみてはいかがでしょうか。
0813名無しさん@お腹いっぱい。
垢版 |
2022/03/22(火) 14:45:32.74
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として現状有効の様です。
0818名無しさん@お腹いっぱい。
垢版 |
2022/04/19(火) 20:48:40.33
プロットするデータの個数によって、with linesとwith pointsを自動切換えできないでしょうか?

多くのデータファイルから自動で2Dプロットを作成しています。
基本的には
  plot "file.dat" with lines
でスッキリした線だけのプロットを描くのですが
たまにX,Yのデータが1組しかないファイルがあり
その場合プロットが目に見えない点だけになってしまいます。

そこでファイル中にデータが1組しかない時は
  plot "file.dat" with points
に自動的に切り替えてくれるとありがたいです。

設定やplotコマンドの書き方でなんとかならないでしょうか?
もしくは、データファイルの書き方で1組のX,Yデータでも
目に見えるポイントを出す方法があればそれでもいいです。
0822名無しさん@お腹いっぱい。
垢版 |
2022/04/21(木) 17:17:27.17
>>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
}
0827818
垢版 |
2022/04/22(金) 19:20:02.97
statsうまくいきました!ありがとう!
統計情報なんて気にもとめてなかった。

ちなみにデータない時はエラーになって、STATS_recordsは元のままですね。
(初回ならundefined)

米澤先生のサイトはブックマークしてあったけど、忘れてた。。。
0828818
垢版 |
2022/04/30(土) 20:53:37.83
5.0系だとログスケールの時にstatsがエラーになるという謎仕様。
5.2以降だと大丈夫みたいだけど、うちの環境だと使いたい端末がインストールができないorz

ところで5chの仕様変更でのせいか輪をかけて過疎化してるね
0830
垢版 |
2022/05/01(日) 18:59:29.08
>>828
> 5.0系だとログスケールの時にstatsがエラーになるという謎仕様。
そうなんですか。しかし,5.0系とは懐かしいですな。

> 5.2以降だと大丈夫みたいだけど、うちの環境だと使いたい端末がインストールができないorz
5.2でインストールできない terminal なんてなんでしょう。5.2でdeprecateになったterminalなのでしょうか。
0831818
垢版 |
2022/05/02(月) 20:28:54.72
>>830

あ、ウチ環なので一般的な話じゃないです。

LinuxやらSolarisやらMacやら、OSバージョンも複数あって
インストールされてるライブラリもまちまちで
どのマシンでも同じバージョンのgnuplotを動かそうとすると
ライブラリが足りなくてmake失敗したりとか。

今んとこ全部のマシンで成功したのが5.0系というだけの話。
0832名無しさん@お腹いっぱい。
垢版 |
2022/05/19(木) 00:17:38.26
set term qt widget <id>
の<id>って何を指定すればいいのかな?
他のアプリのウィンドウに表示できそうなんだけど違うのかな?
マニュアルみてもよくわからない。

x11なら
set term x11 window "<string>"
でウィンドウIDを指定すれば別アプリに表示させられるから
Qtでも出来そうな気がするんだけど違うかな。
0834名無しさん@お腹いっぱい。
垢版 |
2022/05/28(土) 21:26:00.53
じぶんはTcl/TkのGUIアプリでウィジェットにgnuplotを表示させてます。
んでTkのscaleをぐりぐりするとグラフがぐりぐり動きます。

Tkinterならwinfo_idで出来そう
0847名無しさん@お腹いっぱい。
垢版 |
2022/09/07(水) 22:33:21.24
↑途中で失礼しました。
>>845
この実装をONにした開発版Windowsバイナリを以下に置いてます。

demo ディレクトリ下の watchmouse.dem, watchpoints.dem を実行してみてください。
0852名無しさん@お腹いっぱい。
垢版 |
2022/09/14(水) 07:22:37.30
ある数値aとbがあるとき、a±bを横長の帯として表したいんだが、どうしたらシンプルに実現できるかな?
0 a b
0.1 a b
...
というファイルを作ってwith filledcurveでプロットすればそれらしく見えると思うけど、中間生成物を沢山作りたくない
0853名無しさん@お腹いっぱい。
垢版 |
2022/09/14(水) 11:13:59.98
>>852
回答ではないかもしれないけどファイル作りたくないならデータブロックをりようすればよいのでは

$data << EOF
0 a b
0.1 a b
EOF
0856名無しさん@お腹いっぱい。
垢版 |
2022/09/14(水) 16:56:40.03
>>854
すみません

>>855
そうです

横軸をx軸と呼ぶことにして、>>852で書いた数値a、bはxによらないということです
で、xによらない定数値としてグラフに描画したいということです
定数aを描画したいだけなら plot a で良いのですが、これにエラーをつけるにはどうしたら良いですかと言い換えることもできます
0857名無しさん@お腹いっぱい。
垢版 |
2022/09/14(水) 20:34:10.37
xerrorbarsではなく?
0860名無しさん@お腹いっぱい。
垢版 |
2022/09/15(木) 03:00:42.78
>>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
0865名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 08:47:14.22
>>861
860を実行すると塗りつぶした長方形となるんだが,やりたいのはそれなの。
yの値がxに依存する場合も考えるのかな?
x, yのデータが与えられてぬりつぶしの幅を簡単に変えたい。
データの第3列目に書くのは面倒。

こんなことでいいですか?
0868名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 11:58:27.66
>>865
> 860を実行すると塗りつぶした長方形となるんだが,やりたいのはそれなの。
>>861で申したように、そうです
それを中間ファイルを用意せずにやりたいということです


> yの値がxに依存する場合も考えるのかな?
>>856,859で申したように、yもエラーの幅も横軸に依存しません


> x, yのデータが与えられてぬりつぶしの幅を簡単に変えたい。
> データの第3列目に書くのは面倒。
> こんなことでいいですか?
いいえ
与えられるのは定数値a、bだけです
aはいわば中央値を、bはいわばエラーの幅を表します
これらは定数なので、xによりません
したがって、わざわざ
x y ye
なるフォーマットのファイルを用意するのが面倒だというのが>>852で申したことです
0870名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 12:39:38.21
おそらく>>860は回答のつもりで「こういうこと?」と聞いていて、質問者>>861は見た目のつもりで「そうです」と言っているのですれ違いが起きている。
で、>>861の「任意の面積」とは流れを踏まえれば明らかに「任意の矩形」という意味だが>>865 (>>860,862,867あたりと同じ人だろう) は額面通りに受け取ってしまったばかりにxに依存する何かを想定している。

視点によっては回答者が文盲にも見えるし質問者が問題を抱えているようにも見えるのだろう。
0871名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 12:43:29.35
>>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
0873名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 13:29:36.20
あと、ファイルを作ってfilledcurveする案で妥協するなら、わざわざ中間の点を打つ必要はないと思う
両端だけ決めてfilledcurveするので十分
0874名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 14:09:53.99
>>872, 873
>それはdataなるファイルを作ってるからお題にそぐわないのでは?
それはそうなんですが
外側にファイルを作らなければ実際上そう面倒にならない。
中間ファイルの役割をスクリプトの中に実現すために
データブロックがgnuplotに実装されたのだから
それを使って実現しても実際上そんなに問題でないとおもいます。

> 両端だけ決めてfilledcurveするので十分
それ書き込んでから気づきました。
0875名無しさん@お腹いっぱい。
垢版 |
2022/09/16(金) 14:26:00.77
中間ファイルが嫌ならスクリプトに含めりゃええがな
>>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
0876875
垢版 |
2022/09/16(金) 14:39:12.89
>>871も中間ファイル作らんのね
失礼!
レスを投稿する


ニューススポーツなんでも実況