• 締切済み
  • すぐに回答を!

gnuplotで複数csvファイルからデータ取得

http://t16web.lanl.gov/Kawano/gnuplot/datafile3.html を読んだところ、複数のファイルから読み込む場合は、UNIXのコマンドを使えばいいらしいことはわかったのですが、 #a1.csv 1.0,2.0 2.0,4.0 3.0,6.0 #a2.csv 1.0,1.0 2.0,4.0 3.0,9.0 というファイルに対し、とりあえずpasteを利用して複数行呼び出しを行おうとしたのですが、 gnuplot> set datafile separator "," gnuplot> plot "<paste -d',' a1.csv a2.csv" using 1:2 warning: Skipping unreadable file "<paste -d',' a1.csv a2.csv" No data in plot と表示されてしまいました。 一体どのようにすれば、複数のcsvファイルを結合したものを読み込めるのでしょうか? また、Cygwin上でpasteコマンドについてちょっと実験してみたのですが、 $paste -d"," a1.csv a2.csv >output.txt とすると、 #output.txt 1.0,2.0 ,1.0,1.0 2.0,4.0 ,2.0,4.0 3.0,6.0 ,3.0,9.0 と表示されるのですが、 $paste -d"," a1.csv a2.csv とすると、Cygwin上には、 ,1.0,1.0 ,2.0,4.0 ,3.0,9.0 と表示されます。 output.txtに出力した際は、メモ帳上では、結合している部位で改行されているようには見えないのですが、ブラウザにコピペしたところ改行されてしましました。 どうやら、結合した場所に\rが入っているくさいです。 このpasteを使う方法以外にもgnuplotで扱うのにもっといい方法があるという場合はその方法も教えていただけると幸いです。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1778
  • ありがとう数4

みんなの回答

  • 回答No.1
  • kmee
  • ベストアンサー率55% (1857/3366)

> $paste -d"," a1.csv a2.csv > とすると、Cygwin上には、 >,1.0,1.0 >,2.0,4.0 >,3.0,9.0 これは\r(CR)で行頭にカーソルが移動するために、a1.csvを表示した箇所にa2.csvが上書きされた状態です。 こちらでやってみたところ、 > gnuplot> set datafile separator "," > gnuplot> plot "<paste -d',' a1.csv a2.csv" using 1:2 でグラフが表示されました。 Windowsネイティブ版のgnuplotを使っていて、pasteを認識していない、ということはないですか? カレントディレクトはa1.csv,a2.csvと同じですか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>Windowsネイティブ版のgnuplotを使っていて、pasteを認識していない、ということはないですか? 使ってるgnuplotは、wgnuplot.exeでバージョンは4.2UNIXではなくWindows上で動く物です pasteコマンドはUNIXが持っているコマンドらしいので、Cygwinをインストールすればpasteが使えるようになるんじゃないか?と思い、入れてみたのですが、gnuplotの方から、pasteコマンドがきちんと呼べてないようなのです。環境変数のpathに入れればいいのかな?とも思い、Cygwinのpaste.exeが入っているフォルダを指定したりもしたのですが、やはりgnuplot上ではうまくできてないようなのです。Windows上のgnuplotでpasteコマンドを使用するには、何かgnuplotを設定しないといけないのでしょうか? >カレントディレクトはa1.csv,a2.csvと同じですか? カレントディレクトリについては、そのようになっています。

関連するQ&A

  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • gnuplotについて

    以前、こちらでgnuplotのデータをファイルに出力する方法を教えていただいたものです。 以下のようにやってみたのですが、 gnuplot> set yrange [0:5] gnuplot> plot "h1.txt","h4.txt" gnuplot> set terminal postscript eps Terminal type set to 'postscript' Options are 'eps noenhanced monochrome blacktext \ dashed dashlength 1.0 linewidth 1.0 defaultplex \ palfuncparam 2000,0.003 \ butt "Helvetica" 14' gnuplot> set output 'h20.eps' gnuplot> replot epsファイルが出来ただけで、開くことが出来ません。 開こうとすると『作成元のプログラム名が必要です。インターネットで自動的にプログラムを検索するか、またコンピューターにあるプログラム一覧から手動で選択してください。』と出ます。 どうすれば、開くことが出来るのでしょうか? 印刷のためのファイルなので、開くことは出来ないのでしょうか?

  • gnuplotデータを編集してプロット

    gnuplotでデータを編集してプロットしようと思い、 set datafile separator "," plot 'test.csv' using 1:($4*2) with lines と打ちました。 これを、gnuplotに直接打つとうまくいくのですが、これをtest.pltというファイルに保存して、 call 'test.plt' と、実行すると、 gnuplot> call 'test.plt' gnuplot> plot 'PIDtorque.csv' using 1:(*2) with lines                     ^ "test.plt", line 2: invalid expression と、表示されます。 これは何故なのでしょうか? 宜しくお願いします。

  • 【Windows】gnuplotの表示について

    リアルタイムに更新されるCSVファイルがあり、 gnuplotで1秒間隔でCSVファイルを読み込み、自動でプロットしたいと思っています。 以下のようなコードでグラフを表示させているのですが、CSVファイルが更新されても グラフ上で何か動作しない限り更新されません。(目的としている自動更新がされない) OSは Windows10 です。 cd 'C:¥Users¥10537¥Desktop¥gnuplot' #CSVファイルの保管場所 set datafile separator"," plot "test.csv" pause 1 reread あるサイトを見ると、「reread」コマンドは対話形式では動作しないとあったため、 cd 'C:¥Users¥10537¥Desktop¥gnuplot'  set datafile separator"," plot "test.csv" pause 1 を "test.gp"という名前で保存をして、 load test.gp reread と実行しましたが、結果は同じでした。 行き詰ってしまったため、どなたかお助けいただきたくお願いします。

  • CSVとtxtからCSVファイルをつくるには

    元ファイル1.CSVと 元ファイル2.txtから 新しいCSVをつくりたいのです。 元ファイル2.txtは元ファイル3.txt、元ファイル4.txtといっぱいあります。 こちらは改行ありの文章です。 元ファイル1.CSVの第二フィールドに、元ファイル2.txtを差し込みたいのです。 今までは元ファイル2.txtを開いてコピーして、エクセル上で元ファイル1.CSVにペーストして、 CSVで保存していました。 しかし、このやり方だとtxtファイルの数が増えてくると、だんだんやりきれなくなってきました。 なにかうまい方法はないでしょうか?

  • C言語によるgnuplotの呼び出し

    シミュレーションによって得られた計算結果を自動的にgnuplotで 表示させるプログラミングを作成しました。シミュレーション自体は fortranで行っていてfort.61というファイルが出力されます。 c言語でこのファイルを読みとって、それに少し細工をしfort.62 というファイルに新たに書き込んで、gnuplotで表示させたいのですが、 gnuplotの画面で no valid dataというエラーが表示されてしまいます。 ところが、cのプログラムを終了させてからgnuplotでこのfort.62を 通常の方法でplotすると、きちんとグラフが表示されます。 何が原因がわかるかたいらっしゃいましたら、教えて下さい。 ちなみにコンパイルはcygwin上でgccを使用しています。以下にソース を添付します。gnuplotで読み込んでいるファイルplot.pltは 「plot "fort.62"」と記述してあるtextファイルです。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) {     FILE *fp,*fp2;     int i,N;     double x,y;     double volt[100],curr[100];     double norm,para;     para = 0.2442E-03;     N=14;     fp=fopen("fort.61","r");     for(i=0;i<N;i++){       fscanf(fp,"%lf %lf",&x,&y);       volt[i] = x;       curr[i] = y;       if(volt[i] == -1.0){       norm = para/curr[i];       }     }     for(i=0;i<N;i++){       curr[i] = norm*curr[i];     }   close(fp);   fp2 = fopen("fort.62","w");     for(i=0;i<N;i++){       fprintf(fp2,"%lf %lf\n",volt[i],curr[i]);     }     close(fp2);     system("wgnuplot -persist plot.plt"); }

  • データファイルをプロットする(gnuplot)

    gnuplotを使ってデータファイルをプロットしたいのですがうまくいきません。 gnuplot初心者です。よろしくお願いします。 plot "gtest.dat" とコマンドを打つと、 warning: Skipping unreadable file "gtest.dat" No data in plot となってグラフが表示されません。 ちなみにgtest.datの中身は、 1 20 2 60 3 80 4 60 5 100 です。 原因として自分で怪しいと思っているのは、 1.gtest.datの置いてある場所   Cドライブの下の適当なフォルダにおいて実行したのですが、これがまずいのでしょうか。   置く場所は決まっているのでしょうか。 2.DATファイルの作り方   gnuplotの使い方の説明のサイトではいつもファイルのプロットの際、DATファイルが使われていたので   自分もそれに合わせようとそたのですが作り方に自信がありません。   メモ帳で作成し保存の際、拡張子を.datに変更しました。   これでいいのっでしょうか。 長くなりましたが、よろしくお願いします。  

  • InDesign CSV データ結合

    InDesign CS4 で CSVファイルからデータ結合を しようとしています。 CSVを読み込みましたが、部分的に読み込まれない部分があります。 CSVの改行を削除をしたりしていますが、解決できません。 改行以外の原因は他にありますか? セル内のデータには、 10:00&#65374;12:00 14:00&#65374;21:00 という文字列が含まれますが、 それらも読み込まれている箇所と、そうでない箇所があります。

  • ネストされた配列からのCSV出力の方法

    はじめまして。 勉強中のRuby(2.0)で、 以下のようにCSVファイルの書式変換をしようとしています。 ■変換前 # 入力ファイル1(input1.csv) A, B, C, D A1,B1,C1,D1 A2,B2,C2,D2 A3,B3,C3,D3 # 入力ファイル2(input2.csv) B C ■変換後(output.csv) B, C, A, D B1,C1,A1,D1 B2,C2,A2,D2 B3,C3,A3,D3 ■変換内容 入力ファイル1に対して、入力ファイル2で指定された文字をヘッダーにもつ列を 順次先頭に移動していき、それを、出力ファイルとする。 ■経緯 いろいろ試行錯誤をしながら、以下のような配列(output_ary)を 作るところまではできたのですが、 これをcsvに書き出す術がわからずにおります。 (カッコやダブルコーテーションがついたままになったり、 改行がされなかったり..) (pp output_ary の結果) pp output_ary #=> [["B1","C1","A1","D1"], ["B2","C2","A2","D2"], ["B3","C3","A3","D3"], ["B4","C4","A4","D4"]] お手数ですが どなたかご教示ください。 もちろん、「上記 output_ary のようなモノを作らなくてもこうすればできるよ」というご回答でもOKです。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • リダイレクト >> を複数のファイルに同時に行いたい

    cat A.txt >> B.txt とコマンドを実行することで、B.txtの末尾にA.txtが挿入されると思います。 これを利用して、複数のファイル(拡張子がtxt)全てにA.txtの内容を挿入させたいのですが、その場合はどういったコマンドを打てばいいのでしょうか? 何か、ディレクトリの中のファイル全てに対して再帰的に処理を施す、という方法がありましたら、お教えください。