• 締切済み

C言語 3次元グラフ

今、スペクトラムアナライザという計測機器をC言語を用いてデータを取得し、CSVファイルに書き込みました。その後、CSVファイルを開き、エクセルで3Dグラフ(等高線を用いました)にしようとしたのですが系列が255個までという制限がありました。私の取得したデータは461ポイントあるのでグラフを2分割しなければなりません。 CSVファイルの中身の一例としては 周波数,8000,9000,10000・・・ 11:00,-60E01,-61E01,-61E01・・・ 11:01,-62E01,-61E01,-60E01・・・ ・ ・ ・ ちょっと見づらいですが、1行目が周波数で1列目が取得した時間で2行目以降は周波数における電力です。プログラムとしてはデータを取得するコマンドを1秒ごとに送り、1行ごとにCSVファイルに書き込みをしています。 前置きが長くなりましたが、これを3Dグラフにするには何を学習しなければならないでしょうか?友達はWindowsプログラミングで書けばいいよと教えてくれたので、猫でも分かるWindowsプログラミングを買ってきたのですが中々難しそうで最初から挫折しそうです。後、いろいろ調べているとgnuplotという単語が良く出てくるのですが、 1)gnuplotで3次元グラフは作成できますか? 2)仮にgnuplotで3次元グラフが描けるなら、Windowsプログラミングとgnuplotではどちらを学習したほうがいいでしょうか? 参考書やお勧めのURLがあったらお願いします。

みんなの回答

回答No.2

>1)gnuplotで3次元グラフは作成できますか? 私はほとんど使用しませんがgnuplotで3次元グラフを描くことができます。 しかしcsv(カンマ切り)ファイルをそのまま扱えるわけではないようので、gnuplotで読める形式に変換しておく必要が生じます。xyz203さんの場合、系列数が461もあってexcelで読めないとのことなので、変換プログラムを作って対処ということになりますかね。 詳細は↓が参考になると思います。グラフ出力例もあります。 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/index-gnuplot.html >Windowsプログラミングとgnuplotではどちらを学習 前者はえらく範囲が広いですね。 例えばVisual Studioでプログラミングするのだとしてもバージョン、言語、ライブラリなど選択肢がたくさんありますが、プログラミング言語の習得だけではグラフを描くところまではできませんので、DirextXやGDI+などの描画を実現するためのライブラリも含め、関連する技術を総合的に習得する必要があります。 グラフ作成ツール系言語として自己完結している gnuplot と比較するのはどうかと思いますが、3次元グラフ作成だけに留まらず工学系で応用できる技術としてC++などのプログラミングに手を染めること有益だと思います。

xyz203
質問者

お礼

回答有難うございます。 gunplotは数式しかグラフにできないのかなと思ってましたが、そうでもなさそうですね。 >>自己完結している gnuplot グラフの出力をメインとしているので今回はgunplotでがんばろうと思います。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

あくまで「グラフの出力」が目的で手段がどうでもいいのであれば、 ・Excel2007を使う ・OpenOffice.org Calcを使う って手があります。 あるいは何らかの手段でcsvの行列入れ替えができれば2003以前のExcelでもグラフを書くことは可能でしょう。

xyz203
質問者

お礼

回答有難うございます。 Excel2007でグラフを作るとどうしても255までと言われてしまいます。また、私が取得するデータは1日分ありますので相当の量があり行列を入れ替えることができませんでした。 私の説明が足らなくてすいませんでした。

関連するQ&A

  • 3次元グラフ

    実験から得た3つの変数のデータ(x,y,z)をgnuplotに入力して3次元のグラフを作ったのですが、そのグラフのz=f(x,y)の近似関数を知りたいです。どうすればよいのでしょうか? gnuplotを使ったことがなくて全く分かりません。 宜しくお願いします。

  • gnuplotで鳥瞰図グラフ

    gnuplotの使い方がよく分からないので教えて下さい。 卒論で3次元のデータをテキストファイルに書き込んでgnuplotで鳥瞰図表示のグラフを作成したいと思っていますがうまくいきません。 連続関数ではないのでうまく鳥瞰図にできるかわからないのですがうまく表示させる方法があれば教えて下さい。 splotなどの関数は使いましたが値が0である場所もあるのでなかなかきれいになりません。できれば鳥瞰図の下に等高線を表示させたいと思っています。 よろしくお願い致します。

  • gnuplotでグラフの出力

    gnuplotで以下のファイルを可視化したいのですが。 出力ファイルに 0.0 10E-9 1.0 10E-9 2.0 9E-9 .... ..... ..... ...... ..... ...... 10.0 ....... 12.0 ....... 15.0 ....... ..... ...... 170.0 ........ 180.0 ...... のような2列のデータがあります。 1列目をx軸、2列目をy軸として2次元のグラフを描きたいのですが どのようにすればできるでしょうか? どなたかご存知の方よろしくお願いします。

  • C言語  二次元配列

    C言語をやることになり苦戦しています。 CSVファイルからデータを呼び出し、二次元配列として出力したいのですが上手くいきません。 CSVファイルには英数字が混ざっており、エクセルでいう、11行と1440列ほどのデータがあります。初心者なりに書いてみたのですが、どこから手を付けたらいいかわかりません。 是非ヒントを頂けるとうれしいです。よろしくお願いします。 理想 [0][0] = [testtesttest] [0][1] = [testtesttesttest] 一行が終わりしだい [1][0] = [testtesttesttest] と変わっていくようにしたいです。 エラーが出ますが、コードを記載させていただきます。 コード #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(void) { //ストリームポインタ FILE *fp; int kk = 0; int nn = 0; int hoge; //ファイルから読み込んだテキスト1行分を格納するためのchar配列を指定します int piyo[11][1440]; //*filename : 開くファイル名を指定 char *fname = "./test1/test2/201509/test.csv"; //ファイルが無かったり,指定フォルダでなければ、FILE変数fpはNULLが返ります。 fp = fopen(fname, "r"); //NULLが返ってきた場合の処理 if (fp == NULL) { printf("%sファイルが開けません¥n", fname); return -1; } //ファイルから1行ずつ読み込む成功すると、読み込んだ文字列のポインタを返し、失敗すると、NULLを返します。 while (1 == fscanf(fp, "%c,", &hoge)) { piyo[kk][nn] = hoge; printf("[%d][%d]=%d\n", kk, nn, piyo[kk][nn]); nn++; if (1440 == nn) { kk++; nn = 0; } } //FILE *fp : fopen()で取得したファイルポインタ fclose(fp); return 0; }

  • C言語を用いて、GNUPLOTでリアルタイムにグラフ化方法について。

    C言語を使用して、GNUPLOTを呼び出し、時間とともに更新されていくデータをリアルタイムでグラフ化しようと思っていますが、なかなかうまくいきません。 私が考えていた簡単なプログラムのシーケンスとして、(OSはLinuxです。) ~データの作成~  fopen;データファイルの作成  fprintf;/データの作成  fclose;/データの保存 ~グラフ化~  popen;/GNUPLOTの呼出  fprintf(---,”plot \”[作成したデータファイル]\”\n”);/グラフ化 ~データの更新~  fopen;  fprintf;  fclose;/データの上書き ~グラフの更新~  fprintf(---,”reread\n”);/データの再読み込み  fprintf(---,”replot\n”);/グラフの更新 ~データの更新~ ~グラフの更新~ ・・・/ループ  pclose;/GNUPLOTの終了 と、データを更新したら、グラフ化をしていく予定でした(汗)。 テスト的に10回だけデータの更新をするプログラムを動作させると、 データの更新を先に全部行ってしまい、グラフ化されるのが、最後の更新データのみでした。 どのようにしたら、リアルタイムにデータをプロットできるでしょうか?? よろしくお願い致します。

  • gnuplotでのグラフの作り方について教えてください。

    gnuplotで、例えば 100 200 300 400 600 500 200 100 800 400 200 500 というテキストファイルがあります。 これをグラフにしたいのですが、 X軸をこの行の数を取り入れたいのですが どうすればいいのでしょうか? やはり、一列目に 1 2 3 と入れなければいけないのでしょうか? わかりにくいかもしれませんが 補足はしますので、ご指導おねがいします。

  • BME280データのグラフ化

    https://karaage.hatenadiary.jp/entry/2016/05/11/073000 上記のサイトの記事を見て作っています。 記事はBME280からのデーターをi2cでraspiに送りそのデーターをcsvデーターに 変換しそれをgnuplotでグラフ化すると言う記事です。 ------------------------------------------------------------------- 記事のTOPの表題は (pythonのサンプルプログラムで温度・湿度を取得) (温度・湿度をグラフ化)の内容部分  このままだとわかりづらいので、データをまとめてグラフ化してみます。PC上でエクセル的なもので処理するのも面倒くさいのでRaspberry Piでグラフを生成・・・ ------------------------------------------------------------------------ (温度・湿度をグラフ化)のところから分からないので作者にお尋ねしたのですが さっぱり分かりません。 どうしたらCSVのデーターからGNUPLOTを作成したいのですがどの様に勧めたら良いのか教えて頂けないでしょうか。

  • 自動でグラフを作成するソフトを探しています

    CSVのデータを取り込み、折れ線グラフを自動で作成し、画像で出力してくれるフリーソフトを探しています。 CSVファイルが多く(約500)、また毎日データが追加される為、Excelのグラフ機能で1つ1つ作成する方法は手間がかかり過ぎてできません。 Vectorで探してみましたが、散布図や3Dのソフトはあるものの、単純にCSVを折れ線グラフにするソフトが見つかりませんでした。 Rも触ってみたのですが、プログラミングの知識がなく、エラーばかりで作成まで漕ぎ着けられませんでした。 求める機能は以下の通りです。 ・CSVデータを取り込んでグラフ化できる ・グラフを画像で出力できる ・(可能であれば)複数のCSVファイルを一括で処理できる オススメのソフトがありましたら、ぜひご教示下さい。

  • C言語 配列

    ご質問させていただきます。 CSVファイルからデータを呼び出し、二次元配列として出力したいのですが上手くいきません。 CSVファイルには英数字が混ざっており、エクセルでいう、11行と1440列ほどのデータがあります。初心者なりに書いてみたのですが、どこから手を付けたらいいかわかりません。 三次元配列にしないといけないとのアドバイスをいただいたのですがどのようにすればいいかわかりませんヒントを頂けるとたすかります。 元のcsvファイルは例ですがこのような下記のような構造になっていて2行目にいったときに[0][0]から[1][0]と変わっていってほしいです。 testt,esttest,testte,stte,sttest testte,sttes,ttest,~ 理想 [0][0] = [testtesttest] [0][1] = [testtesttesttest] 一行が終わりしだい [1][0] = [testtesttesttest] と変わっていくようにしたいです。 エラーが出ますが、コードを記載させていただきます。 コード #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(void) { //ストリームポインタ FILE *fp; int kk = 0; int nn = 0; int hoge; //ファイルから読み込んだテキスト1行分を格納するためのchar配列を指定します int piyo[11][1440]; //*filename : 開くファイル名を指定 char *fname = "./test1/test2/201509/test.csv"; //ファイルが無かったり,指定フォルダでなければ、FILE変数fpはNULLが返ります。 fp = fopen(fname, "r"); //NULLが返ってきた場合の処理 if (fp == NULL) { printf("%sファイルが開けません¥n", fname); return -1; } //ファイルから1行ずつ読み込む成功すると、読み込んだ文字列のポインタを返し、失敗すると、NULLを返します。 while (1 == fscanf(fp, "%c,", &hoge)) { piyo[kk][nn] = hoge; printf("[%d][%d]=%d\n", kk, nn, piyo[kk][nn]); nn++; if (1440 == nn) { kk++; nn = 0; } } //FILE *fp : fopen()で取得したファイルポインタ fclose(fp); return 0; }

  • 3次元から2次元

    初心者です。よろしくお願いします。 1列22万行というデータがあって、これがおそらく3次元のデータになっているのですが、このデータから2次元化させる処理をしたいです。まず、なにを勉強すればいいのか誰か教えてください。 これがデータです -5.968777e+001 -4.980782e+001 -5.336652e+001 -5.745100e+001 -5.004265e+001 -5.424643e+001 -5.613978e+001 -5.251739e+001 -5.913038e+001 -5.330338e+001 -4.782873e+001 -5.969824e+001     ・     ・     ・    

専門家に質問してみよう