
Ubuntu日本語フォーラム

ログインしていません。
ubuntu10.10を使っている初級者です。gnuplotを使用する際の問題点についてアドバイス頂ければ幸いです。
ある計算をしている最中に、その出力データをgnuplotをつかってグラフ化し、その計算の途中経過を確認したいと思っていますが、ubuntuでgnuplotを起動させている場合、計算が完全に終了しないと作図することができません。
友人は、別のCENTOSのマシンで同様にgnuplotを使用していますが、問題なく出力データが更新された後にコマンドをたたくと、いつでも最新の出力結果が反映された図が表示されます。また、以前unixを使用していた時は、全く問題なく出力結果が途中でグラフ化することができました。
ちなみに計算途中で,実線でグラフを表示させようとして以下のコマンドをたたくと次のようなメッセージが表示されます。
gnuplot> plot "NAMEofDATA.dat" w l
warning: Skipping data file with no valid points
x range is invalid
何か改善方法をご存知であれば教えて頂ければ幸いです。
オフライン
katokato 様へ.
タイトルを読んでリアルタイム更新かと思いましたが,
コマンドを叩くという事はそうでもないんですね.
問題は下のワーニングが出るという事で宜しいでしょうか?
ある時のデータファイルの状態(特にデータファイル末尾)を
提示してもらえないでしょうか?
この問題はデータファイルが適切でないことが原因な気がします.
オフライン
計算途中で出力データファイルを開くとまっさらだったりしませんか?
fprintf などで出力している場合には実際にはファイルには直接出力されず、
一度バッファに貯めた後に、バッファがある程度たまるか、プログラムが終了した際に (fclose された時に)
ファイルに書きに行くようになっている場合が多いです。
そのため、すぐに出力バッファをファイルに書きに行くには fflush を呼び出して
バッファを「フラッシュ」してあげる必要があります。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/fflush.3.html
オフライン
hellfire様
メッセージありがとうございます。
目的は、自動にリアルタイムで表示できれば言うことなしですが、それはちょっと難しそうなので、とりあえず
$plot 〜〜
とコマンドたたいてその時の最新の出力ファイルが見れればよいかと思っています。
出力データファイルは、filename.txt というテキストファイル形式で、中身は以下のとおりです。
0 -1.611233552E-01
1 -1.711233552E-01
2 -1.811233552E-01
3 -1.911233552E-01
4 -2.011233552E-01
5 -2.111233552E-01
末尾は特になにもなく、上の6行だけです。
なお、計算途中ではこのファイルは開いても何も書かれていない状態でした。
このデータはまずいでしょうか?
オフライン
epli様
メッセージありがとう御座います。
さて、今私が使っているファイルはfortran90でして、fflushはCの関数でしょうか?
今、それに該当するような関数がfortranにも存在するか探しておりますが未だ見つけれらておりません。。。
オフライン
katokato による投稿:
epli様
メッセージありがとう御座います。
さて、今私が使っているファイルはfortran90でして、fflushはCの関数でしょうか?
今、それに該当するような関数がfortranにも存在するか探しておりますが未だ見つけれらておりません。。。
すみません、Fortran でしたか。
Fortran はあまり詳しくないのですが、いま調べたところによると Fortran 2003 だと FLUSH 文でサポートしているみたいですが、
90 では直接はサポートしてないんじゃないんですかね…。
http://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_7_16.html
標準出力に出力するとかなら問題ないんじゃないかと思うのですが、それではダメでしょうか?
オフライン
katokato 様へ.
もう結論は出ているようですが,ひとまずレスポンスをば.
katokato による投稿:
なお、計算途中ではこのファイルは開いても何も書かれていない状態でした。
このデータはまずいでしょうか?
まずいと思います.
データがファイルに出力されていなければ,
gnuplot はプロットすることができません.
試しに空ファイルを作って,プロットさせましたが,
同様のエラーが出ました.
解決方法は,epii 様の方法が最適かと思われます.
他の OS ではうまくいったと書かれておりますが,
それはおそらく,コンパイラの解釈や仕様が異なっていて,
他の環境では,一定の間隔で出力できていたのだと思います.
もちろん,こういう問題は環境依存になってしまうため,
そういうことがないようにプログラムを組むのが最善なのですが….
オフライン
hellfier様 epli 様
有り難うございます。プログラムの方で対応してみたいと思います。
どうも有り難うございました。
オフライン