• 締切済み

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で扱うのにもっといい方法があるという場合はその方法も教えていただけると幸いです。 よろしくお願いします。

みんなの回答

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

> $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と同じですか?

glarelance
質問者

お礼

>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

  • 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 と、表示されます。 これは何故なのでしょうか? 宜しくお願いします。

  • データファイルをプロットする(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に変更しました。   これでいいのっでしょうか。 長くなりましたが、よろしくお願いします。  

  • 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ファイルが出来ただけで、開くことが出来ません。 開こうとすると『作成元のプログラム名が必要です。インターネットで自動的にプログラムを検索するか、またコンピューターにあるプログラム一覧から手動で選択してください。』と出ます。 どうすれば、開くことが出来るのでしょうか? 印刷のためのファイルなので、開くことは出来ないのでしょうか?

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • 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
  • CSVとtxtからCSVファイルをつくるには

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

  • CGI Chart::Gnuplotの使用法

    コマンドラインからだと作成されるpngファイルがブラウザからだと作成されません。 ブラウザにデバッグ用のprint文は、表示されます。 http://localhost/~.../sample.pl を実行しても、 ブラウザに hello-helloが表示されるだけで、 file.pngが作成されません。 file.pngをブラウザから作成するには、どうしたら良いのでしょうか? よろしくお願いいたします。 コマンドラインからだと、gnuplotで作成されたfile.pngが作成されます。 bash-3.2$ perl sample.pl Content-type:text/html hello-hello 使用したプログラムは、以下のとおりです。 < sample.pl > #! /usr/bin/perl print "Content-type:text/html\n\n"; #use strict; #use warnings; use CGI; use Chart::Gnuplot; my $chart = Chart::Gnuplot->new( output => "file.png" ); my $dataSet = Chart::Gnuplot::DataSet->new( datafile => "test.data" ); print "hello-hello\n"; $chart->plot2d($dataSet);

    • ベストアンサー
    • Perl
  • CSVで余計な空行が入る

    Windows XPでruby 1.9を使用しております。 (ruby 1.9.3p286 (2012-10-12 revision 37165) [i386-mswin32_100]) CSVライブラリの勉強をしていて見つけたのですが、下のプログラムで改行を含むデータを持つCSVを読み込み出力すると、その改行部分に余分な空行が追加されてしまいます。 出力されたoutput.csvをバイナリエディタで確認すると改行を含むデータの改行部分が 元は0x0D,0x0Aであったものが出力されたファイルでは0x0D,0x0D,0x0Aと 0x0Dが1個余分にくっついているのが原因のようです。 この現象を回避する方法がありましたら教えてください。 よろしくお願いします。 -----test.rb # coding: Windows-31J require 'CSV' CSV.open('output.csv','w') do |csv| CSV.foreach('input.csv') do |row| csv << row end end ----- -----input.csv 10,11,12 20,"2 1",22 30,31,32 ----- -----出力output.csv 10,11,12 20,"2           <- この空行が追加されてしまいます。 1",22 30,31,32 -----

    • ベストアンサー
    • Ruby
  • gnuplotでreplotできない??

    下記のプログラムを書きました。 下記のプログラムでは1枚のグラフの複数のグラフをどんどん重ね、さらに1つのemfファイルとして出力し保存しようとしています。 しかし、問題が発生しました。 プログラム中のfprintf(gp, "replot (x+1)*x*(x-1)\n");を消すとプログラムは動くのですがreplotがあるとうまく画像ファイルが保存されません。 emfファイルはできている(ファイル容量は0ではない。)のですが、emfファイルが壊れており見ることができません。 その理由がわかる方がいましたら、教えていただけないでしょうか? よろしくお願いします。 以下、書いたプログラムです。 #include <stdio.h> #include <windows.h> #include <tchar.h> #include <string> #include<conio.h> using namespace std; #define GNUPLOT_PATH "C:/gnuplot/gnuplot/binary/gnuplot.exe" //char *a[10]; char a[10][50]; long n; long l; int main() { FILE *gp; gp = _popen(GNUPLOT_PATH, "w"); if (gp == NULL) { fprintf(stderr, "Oops, I can't find %s.", GNUPLOT_PATH); exit(EXIT_FAILURE); } // gnuplotにコマンドを送る fprintf(gp, "set terminal emf color 'Ryumin-Light-EUC-H' 16\n"); fprintf(gp, "set output '%s.emf'\n", a[n]); fprintf(gp, "set title '日本語-入力テスト'\n"); //x軸の範囲の設定 //fprintf(gp, "set xrange [-60:60]\n"); //fprintf(gp, "set yrange [0:3]\n"); fprintf(gp, "set grid\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set datafile separator ','\n"); fprintf(gp, "set key bottom outside\n"); fprintf(gp, "plot sin(x)\n");     fprintf(gp, "replot (x+1)*x*(x-1)\n"); fflush(gp); // バッファに格納されているデータを吐き出す(必須) //getchar(); // 入力待ち _pclose(gp); exit(EXIT_SUCCESS); return 0; }

  • 2つのファイルを結合してファイルを出力する方法

    以下のような二つのファイルがあるとします。 1_input.csv: num,cap 1,A 2,B 3,C 4,D 5,E 2_input.csv: num,sma 2,a 2,b 4,c 5,d 5,e この2つのcsvファイルからnumを比較して同じ値の時に列を追加するような以下のファイルを作りたいです。 output.csv: num,sma,cap 2,a,B 2,b,B 4,c,D 5,d,E 5,e,E awkなどを使って一列目を比較してpasteで結合などを考えましたが知識不足でうまくできない状況です。どなたかご教授いただけませんでしょうか。よろしくお願いします。