gnuplot を使おう。 その3
グラフ生成のスクリプトを作成して実行するとプロセスが残ってしまうのですが プロセスを終了するにはどうすればいいのでしょうか? 繰り返し実行するとグラフは作成されるのですが、繰り返した回数だけ gnuplotのプロセスが残ってしまいます。 OSはWindowsです。 >>433 こんなんしたときこっちではプロセス残ったりしない C:\>more sin.plot set terminal png set output "sin.png" plot sin(x) C:\>gnuplot sin.plot >>434 最後にset outputを付けないと生成したファイルを開こうとすると他のプロセスが使用中 で開けませんってなりませんか? set outputを付けないで何度がテストした感じだとプロセスが増えていないかもしれないですが ファイルを開けないので実用に耐えないです。 マシンを再起動すれば開けましたが。 >>434 最新のバージョンで試したらプロセスは残りませんでした。 古いバージョンのバグだったみたいです。お騒がせしました。 matplotlibというものに出会ってどうでもよくなった。 >>439 python載せたら良いじゃん。 matplotlib使ったらgnuplotなんて要らなくなるか、ちょっとしたグラフ描きたいぐらいのついでぐらいでしか使わなくなるよ。 本格的にやるんなら、python+numpy+matplotlib+pandasで何でも出来るぜ。 gnuplotの使い方を分かってなさそう どういう使い方してる? set label {/Symbol p}とかで出力する文字のフォントはどこで設定するんですか? set label set label {/Symbol p}とかで出力する文字のフォントはどこで設定するんですか? set label あいうえおとかのフォントは設定できるんですが、(この場合の)Symbolのπ のフォントはデフォルト?が使われているみたいできれいじゃないです。 OSはWindowsです。 ダブルクオートはだめみたいなので再度書き込みます。 >>443 です。 terminalをwindowsにしたらきれいなフォントで出力されました。 wtxの問題のようですが、wtxのフォントの設定は特殊なんでしょうか? θとかで記号を記述できることを見つけたんだけど どういう機能なんだろ? マニュアルで探しても見つけられなかったんだけど 機能の名前とか説明しているページとか知ってたら教えて >>446 エンティティって何だろう? マニュアルを検索しても見当たらなかったけど 文字実体参照 character entity reference >>446 θの形式がcharacter entity referenceだってこと? ただ、character entity referenceをgnuplotがどうサポートしてるかについては マニュアルもWebのページも見つけられない PNGとかでしか使えないみたいだからgnuplotの機能じゃなくてGDライブラリの機能かもしれない HTML, XML, SVGだと みたいに実体参照できる >>452 >>453 これってsvg のスクリプトのことですよね。だから、svgターミナルからはできないってことでいいのかな。 svgをはきださせて、スクリプトをエディタで編集するってことでいいんですか? >>454 テストしたらこうでした。 pngかgifとかでしか使えないみたい。 set terminal wxt noenhance plot x title >>454 テストしたらこうでした。 pngかgifとかでしか使えないみたい。 set terminal wxt noenhance plot x title θ タイトルは「θ」 set terminal png noenhance plot x title θ タイトルは「θ」 set terminal svg noenhance plot x title θ タイトルは「θ」 (ダブルクオートは書き込めなかったから消してます) >>456 情報ありがとう。 便利な機能なので、 feature requestでもだしてみます。 #お前がやれと言われそうですが >>457 よろしく。 ちなみに/Symbolでも記号を指定できるんだけどSymbolフォントの扱いが terminalによってばらばらなんだよね。 確かwxtだとデフォルトのフォントを指定してもSymbolフォントになってしまって 実際にはかっこ悪いフォントが選択される。 pngだとデフォルトのフォントが反映されたような。 >>458 パソコンから書き込んだら2chブラウザで見れないので、スマホから書き込んでいます。 windowsの文字コード表(起動の仕方は、ググって下さい。m(__)m)を起動してTimes New Romanのフォントを探すとギリシャ文字がでてくるので、これをスクリプトを書いているエディタにコピペします。 enhanced textでは '{/Times-New-Roman π}' でπの部分は実際は文字コード表からとってきたコードのフォントです。シングルクォートを使う方がお勧めです。(ダブルクォートでないとできないこともあるようですが。) wxt だけでなく、色々なターミナルで使える方法です。 >>459 Times New Roman のようにフォント名にスペースがある場合は、スペースをハイフン(-)で置き換える(Times-New-Roman)のがTipsです。(これで大分悩んだ(*_*))。 >>456 ちなみにenhanced textでは、{'/:Italic \θ'} のように書く。 >>461 間違えた。 '{/:Italic \&theta}' >>463 ありがとう。 どうしてgdを使っているterminalは対応しているのかだけでも分かればすっきりする。 Unix板なのにWindowsの話ですいません。でも、このビルドツールはunix類似環境で動くので言い訳しておきます。 Build instructions using MSYS2/Mingw-w64 https://sourceforge.net/p/gnuplot/support-requests/199/ このインストラクションにそって開発版のgnuplotのビルドが出来ました。 いい時代になったものだ。 とりあえずは、>>459 の方法を使って下さい。この方法は、この方法で合理性がある方法なので。 >>466 やっぱりそうなんだ。 お蔭様ですっきりしました。 cygwin版gnuplotのcairoベースターミナル(wxt,pngcairo, pdfcairoなど)で Windowsのフォントディレクトリにあるフォントを使うには,fontconfigで そのように設定すればいい。 /etc/fonts/ にlocal.confを作成し, <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- /etc/fonts/fonts.conf file to configure system font access --> <fontconfig> <dir>/cygdrive/c/Windows/Fonts</dir> </fontconfig> と書く。そののち, $ fc-cache -fv を実行する。 上は,C:\Windows\Fontsに(まあ普通はそう)にWindowsのフォントがある 場合なのでその他の場合は /cygdrive/c/Windows/Fonts を適宜書き直す。 これでは,全ユーザーに設定がいく。 ユーザー限定では, ~/.local/share/fonts/ または ~/.fonts/ にlocal.confを作成すればよいようだ。 (fc-cache -fvが上の二つを見にいっている。) これは,gnuplotに限らず,fontconfigでフォントをハンドルしているアプリケーションすべてで 成り立つ設定だ。 これでLANG=Cしなくても,wxtターミナルのフォントがまともになった。 塗りつぶしていない領域と塗りつぶした領域で点線の色を変えるにはどうすればいいんでしょうか? set terminal png set grid front plot x with filledcurves x1 を実行すると塗りつぶした領域では格子線が白で表示されるので分かりやすいです。 同じような効果を得たいのですが、wxtやpngcairoに出力した場合は点線の色が常に黒になるため 塗りつぶした領域では点線が見づらくなってしまいます。 白と黒の点線を指定できれば同じ効果が得られるんでしょうが 点線の地の色と線の色を両方指定する方法とかないのでしょうか? > 点線の色が常に黒になるため 点線が常に黒というのがよくわかりません。 理解力がなかったm(__)m。gridの点線の話か。 png だけ違うのは、libgdの機能のせいかもしれない。 >>472 そうだと思うんだけど、塗りつぶしていない領域と塗りつぶした領域で 点線の色を変える方法を知ってたら教えて欲しいです。 >>473 ここで、答えがつかないようならgnuplot Q&A 掲示板で聞いてみたら? 名前さらすのがいやならハンドルネームでいい訳だし。 >>474 聞いてみる。 どこが一番活発なんだろう? gnuplot Q&A 掲示板に投稿しようとしたら書き込み不可って言われた…。 gnuplot Q&A 掲示板の3129番に投稿しておいた。 >>476 gnuplot Q&A 掲示板への投稿は、スマホからでもできますよ。現に3129番への投稿はスマホから。 >>477 パソコンから書き込もうとしたんですが、だめでした。 代理投稿ありがとうございました。 >>479 grid線を灰色にかえるという、代替案が掲示板ででました。 これでいいかどうかは、話題主さん次第です。別の回答者が現れるかもしれません。 >>480 塗り津美している領域と塗りつぶしていない領域で点線の色を変えたいのでちょっと違います。 でも、それを実現する設定はたぶんないんでしょうね。 なんでこの質問者のレスは全てイラッとするんだろうか… >>481 pngターミナルでgridの色分けしているように見えるのは、錯覚らしい。 領域の境目の座標がわかればver. 5 なら、plotコマンドと三項演算子とfor文などつかって強引にやれんことはないかな。 問題は、領域の境目の座標を知ることだと思います。例のように直線ならば簡単ですが。 >>483 身落とし。set arrowとdo for使うアイディアが出されていました。 >>484 身落とし => 見落とし m(__)m >>483 なるほど。pngではgridの色と点線が違うことが理由でしたか。 すっきりしました。ありがとうございます。 gnuplot Q&A 掲示板の書き込み読んだらgnuplotを使い込んでいてすごい。 gnuplotを仕事で使ってるのかな? >>487 仕事で使っている人ですよ。私も仕事で使ってます。 掲示板便利ですよ。 >>488 やっぱり。かなり使い込んでそうだから。 データ分析とかに使うことが多いんですか? >>489 論文にのせる図の作成。 日頃の実験データの整理。 自作の機器制御プログラムでのリアルタイムプロット。 fitコマンドによるパラメータ最適化。 等々。 gnuplotに触らない日の方が少ない位です。 本格的データ解析はoctaveでやりますが、gnuplotの方が遥かに使用頻度が高いです。 >>490 大学の研究ですか。楽しそう。 実験データをまとめて比較したりしているんですかねえ。 使い方のノウハウとかプロセスとかたまってそうでうらやましいです。 >>487 takeno.iee.niit.ac.jp/~shige/gnuplot/gnuplot.html#info このぺーじは本当に情報の宝庫です。もしご存じなければご覧あれ。 gnuplot Q&A 掲示板にも頻繁に登場されておーと思う回答をされます。 >>492 リンクミス。 http://takeno.iee.niit.ac.jp/ ~shige/unix/gnuplot/gnuplot.html#info サイトの情報ありがとうございます。 読んでみます。 gnuplot+gawkの環境で、fileAの3列目を横軸に、fileBの5列目を縦軸にグラフを描くにはどうすれば良いですか? >>497 awkは基本的に一つのテーブル型のデータファイルを手抜きして操作できるスクリプト。 二つのデータファイルをあつかうにはpasteコマンドでファイルを連結させるのが常套。 pasteを使うのが前提ならばawkは不要。 http://folk.uio.no/hpl/scripting/doc/gnuplot/Kawano/datafile3.html#paste 時間分解能の違う2種類の時系列データで同時刻の際の相関を見るとかだと awkの連想配列が便利と言えば便利かもね >>498 ありがとうございました 思った通りに動作しました >>499 今回は同じだったので異なる場合を見るときは使ってみます 3次元のグラフの目盛の数字と目盛のラベルが他の軸だったり、軸の線と重なる ことがありますが、どうするのがいいのでしょうか? viewやoffsetを調整することはできるのですが、場当たり的な対応であり、 手間もかかるので、うまい対処方法はないでしょうか? >>501 これは、難しい。3Dだから。自分にはいわれている場当たり的対応しか、思い付かない。statsも2次元だし。 ダメもとでgnuplot Q&A 掲示板で聞いてみるとか。 >>501 gnuplot Q&A 掲示板 に投稿してみた。 3140番です。 >>502 viewの角度を元にoffsetを調整することを思いついて試してみたんですが gnuplotが目盛の表示位置を調整しているため、うまく行かないです。 zを25度回転したあたりで1文字分ずらすようです。 ソースを読めば動作が分かるんでしょうがそこまでできないでいます…。 >>501 >>505 gnuplot Q&A 掲示板の3142番の回答のようにバグの可能性があります。 bug ticketsに登録できますか? やり方がわからないならアシストします。 z軸の回転角度を26〜154度にするとy軸の目盛が急に軸に近づくのは おかしい気はしていました。バグなんですかねえ。 bug ticketsに登録したことはないので自信はないです…。 Statusはopenで、Ownerは空でいいと思うし、内容は何とか書けないこともないと思うんですが Milestone、Priority、Labelsはどうするんだろうという感じです。 .scに書き込んでしまったので念のため.netからも。 > Milestone、Priority、Labelsはどうするんだろうという感じです。 ここらは、全部空欄でいいですよ。 私がレポートするときはじめは、気にしてましたが、今は気にしてません。 最初だけは、Anonymousで書き込めますが、やりとりをするにはsourceforgeのアカウントが必要です。アカウント名は、ハンドルネームでもかまいません。 gnuplot Q&Aの回答にあったスクリプトはつけておくことをおすすめします。 >>509 なるほど。登録してみます。 ちなみにviewの角度を元にoffsetを調整する関数が書けそうなのでそれを 完成させてから合わせてbug ticketsに登録しようと思います。 なお、>>507 さんに対応して下さいということではないです。 誰かに対応してもらえるかなあ?という思いを率直に書いただけです。 あしからず。 >>513 登録確認しました。 デベロッパ側の返事があるといいですね。 dgrid3dによる変換後のデータと元データを同じグラフで描画する方法は あるのでしょうか? イメージとしては以下の両方のコマンドを描画したいです。 splot "scatter.dat" using 1:2:3 with impulses set dgrid3d splot "scatter.dat" using 1:2:3 with lines ところが、それをしたいと思って以下を実行すると impulsesも変換後のデータを使ってしまいます。 set dgrid3d splot "scatter.dat" using 1:2:3 with lines, \ "scatter.dat" using 1:2:3 with impulses >>515 解決しました。 set table $dataに一度出力してから$dataとscatter.datを描画すればよかったです。 >>516 解決したと思ったら問題がまだ残っていました。 dgrid3dで作成されるデータは元データが存在する範囲に限られるので取り得る値であっても データがなければ曲面は描画されません。 例えば100点満点のテストのグラフを描画したいのでグラフの範囲は[0:100]だけど 実際の最低点は30点で、最高点は90点だった場合、どのように示すのがいいでしょうか? そのままグラフを示すと曲面が0〜100点を示していると誤解する人が出そうです。 グラフの範囲を[30:90]にするというのも一案だとは思いますが、 グラフの範囲は[0:100]だという前提で、曲面の範囲は30〜90点であることも 誤解なく示すにはどうするのがいいかアイデアを頂きたいです。 >>517 3項演算子はつかえませんか? 具体例は『3項演算子 gnuplot』で検索してみて下さい。 >>518 よく考えたらimpulsesの根元が元データの分布を示していることに気が付きました。 必要であればstatで最小値・最大値が分かるのでデータの範囲をbaseの位置に示してもいいでしょうか。 ただ、当初の質問から派生した疑問としてある曲面の上にあるデータと曲面の下にある データで色分けするにはどうすればいいのでしょうか? 2次元グラフで3項演算子を活用する方法は分かったのですが、3次元の場合の 方法は見つけられていません。 ばらついて分布する元データからdgrid3dで格子の曲面を生成し、 元データがその曲面の上下どちらにあるかを分かりやすく示したい といった利用方法を想定しています。 >>667 このあたりのことは、gnuplot Q&A 掲示板でよく登場される竹のさんが深い造形わをお持ちです。 こちらで回答がつかない場合は、gnuplot Q&A 掲示板で質問されたほうが いいと思います。 >>515 >>516 >>517 >>519 もっと具体的にモデルデータをつけでもらえませんか。ver. 5ならデータブロックでスクリプト内にデータがかけるので。 また、 set dgrid3d splot "scatter.dat" using 1:2:3 with lines, \ "scatter.dat" using 1:2:3 with impulses set tableで外部ファイルに吐き出させたデータ(長ければ、その一部)も書いてもらえませんか? 具体的なことがわからないとどこで質問しても答えはつかないと思います。 >>521 2つの変量が結果に作用する傾向を確認したいといったケースを想定しています。 データにはあまり依存しないと思いますので、 例えば以下のデータをプロットする場合はいかがでしょうか。 # 要因A 要因B 結果 30 50 20 60 80 90 50 70 80 30 60 60 55 60 55 40 70 60 30 80 20 80 80 40 40 50 95 >>520 面白いスクリプトを書かれていらっしゃるのを拝見しました。 状況を見てgnuplot Q&A 掲示板の利用も検討してみます。 >>522 サンプルデータありがとうございます。 まだ、なさりたいことを完全に把握しきれてないので。 >例えば100点満点のテストのグラフを描画したいのでグラフの範囲は[0:100]だけど 実際の最低点は30点で、最高点は90点だった場合、どのように示すのがいいでしょうか? そのままグラフを示すと曲面が0〜100点を示していると誤解する人が出そうです。 グラフの範囲を[30:90]にするというのも一案だとは思いますが、 グラフの範囲は[0:100]だという前提で、曲面の範囲は30〜90点であることも >誤解なく示すにはどうするのがいいかアイデアを頂きたいです。 この点は、 set xrange [0:100] set yrange [0:100] set zrange [0:100] ではだめですか? >>524 そのような方法もあると思います。 元のデータが分布している範囲を明示する必要があれば>>519 の前半の方法も あるかと思います。 同じような悩みを持った方がいらっしゃいましたらどうしたか アイデアを共有して頂きたいと思ってました。 俺もどういうものを作りたいのかいまいちよくわからんけど、grid3dとpm3dの組み合わせとかでいいんけ? それとも、 ttp://www.phyast.pitt.edu/~zov1/gnuplot/html/bargraphs.html の一番下のbargraphみたいなの作りたいの? 作りたいグラフっぽい図を示してもらった方が的を射た答が返ってくると思うよ 連投(´・ω・)スマソ 曲面の上と下のデータってどういう意味? grid3d使ったら、データはすべて曲面上に乗るんじゃないの? >>519 >ばらついて分布する元データからdgrid3dで格子の曲面を生成し、 >元データがその曲面の上下どちらにあるかを分かりやすく示したい といった利用方法を想定しています。 dgrid3dは格子ごとの平面を生成します。 まず、x, y座標からどの格子に属するのを知る必要があります。 これは、原点を考慮した割算とfloor関でできると思います。 また、格子の座標がわかるので格子の平面の方程式がわかり、それがわかれば格子上のz座標がわかります。 与えられたデータのz座標が格子上の z座標より大きいか小さいかてでプロットをかえる三項演算子の実装をします。 文章でいうとこんなところです。 スクリプトにするには、色々考えないといけませんが、今のgnuplotのスクリプトの強力さを考えると実装できると思います。 >>526 >>517 は、こんなグラフを作るにはどうすればいいの?って疑問じゃなくて こういう場合はどういうグラフにするのがいいんだろう?って疑問なので どんなグラフがいいのか私も分かりません。 >>519 のやり方で対応することにします。 もしも、同じような疑問を持たれた方がいらっしゃいましたら経験を 共有して頂ければ十分です。 >>528 生データとそれを元に生成したgrid3dの曲面の両方を描画します。 生データとgrid3dの曲面はずれますので曲面の上下に位置することになり、 そのずれを見やすく色分け表示したいと思いました。 >>529 2次元の場合でも3次元も場合でも三項演算子の使い方は基本的には同じなんですね。 dgrid3dの曲面は式では与えられないので交点のデータから判定するための 条件を自分で記述する必要があるということですか。 方針はイメージできました。ありがとうございます。 $dataに格納されたデータにアクセスするコマンドって用意されているんでしたっけ? 配列のようにアクセスできれば理想ですが、そこまでできないにしても そもそも部分的にデータを取り出すにはどうするんでしょう? 私が知らないだけかも知れませんが。 read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる