質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

1491閲覧

c++でgnuplotを使って複数のデータファイルを一つのグラフにプロットしたい

kai_programing

総合スコア3

gnuplot

gnuplot(ニュープロット)は、2次元や3次元のグラフ作成ができるソフトウェアです。さまざまな数式やデータ集計などのグラフを描写することが可能で、特に2次元グラフを描画する機能は強力です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/11/29 09:39

前提・実現したいこと

c++でgnuplotを使って複数のデータファイルを一つのデータファイルにプロットしたいです。
描きたい図はカラーマップで、pm3dを使います。
データを載せたいのですが、行数が多すぎるので今回は載せるのは辞めたいと思います。。

1つずつなら問題なく図が作成できるのでデータの間違いではないと思うので下のコードのどこが問題か教えていただきたいです。

発生している問題・エラーメッセージ

下図のように1つのファイルのデータしかプロットされないです。
XY.png

該当のソースコード

c++

1#include <iostream> 2#include <string> 3#include <vector> 4#include <fstream> 5#include <stdio.h> 6#include <float.h> 7#include <cmath> 8#include <algorithm> 9#include <numeric> 10 11using namespace std; 12 13int main(){ 14 15 FILE *fs = popen("gnuplot", "w"); 16 fputs("set terminal pngcairo enhanced size 700,600\n",fs); 17 fputs("set output 'figure/XY.png'\n",fs); 18 fputs("set tics font 'Times New Roman,30'\n",fs); 19 fputs("set border lw 2\n",fs); 20 fputs("set pm3d map\n",fs); 21 fputs("set pm3d interpolate 5,5\n",fs); 22 fputs("set size square\n",fs); 23 fputs("set lmargin 0\n",fs); 24 fputs("set bmargin 0\n",fs); 25 fputs("set rmargin 0\n",fs); 26 fputs("set ylabel font 'Times New Roman,35'\n",fs); 27 fputs("set xlabel font 'Times New Roman,35'\n",fs); 28 fputs("set xlabel 'X[mm]'\n",fs); 29 fputs("set ylabel 'Y[mm]'\n",fs); 30 fputs("set ylabel offset -7,0\n",fs); 31 fputs("set xlabel offset 0,-2\n",fs); 32 fputs("set bmargin 3\n",fs); 33 fputs("set xrange [-50:50]\n",fs); 34 fputs("set yrange [-50:50]\n",fs); 35 fputs("set grid xtics ytics lt 1 lw 1 lc rgb 'black'\n",fs); 36 fputs("set grid mxtics mytics lt 1 lw 0.5 lc rgb 'black'\n",fs); 37 fputs("set mxtics 5\n",fs); 38 fputs("set mytics 5\n",fs); 39 fputs("unset key\n",fs); 40 41 fputs("set palette defined (0 '#ffffff',1 '#000090',2 '#000fff',3 '#0090ff',4 '#0fffee',5 '#90ff70',6 '#ffee00',7 '#ff7000',8 '#ee0000',9 '#7f0000')\n",fs); 42 43 fputs("splot 'output/image_z0x0y0.txt' u 1:2:3, 'output/image_z0x2.5y0.txt' u 1:2:3, 'output/image_z0x-2.5y0.txt' u 1:2:3, 'output/image_z0x0y2.5.txt' u 1:2:3, 'output/image_z0x0y-2.5.txt' u 1:2:3, 'output/image_z2.5x0y0.txt' u 1:2:3, 'output/image_z-2.5x0y0.txt' u 1:2:3\n",fs); 44 45 fflush(fs); 46 pclose(fs); 47} 48

試したこと

1つずつなら問題なくsplotできるのですが、複数splotしようとすると1つのファイルのデータしかプロットされません。

補足情報(FW/ツールのバージョンなど)

mac

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

binz

2020/11/29 12:49

各データのx軸とy軸の範囲はすべて同じ範囲でしょうか。もし同じであれば重なってしまっている可能性があります。データが大きいということなので載せるのは難しいでしょうが、ファイルのフォーマットやxyzの範囲などの情報があるとよいと思います。
kai_programing

2020/11/29 13:52

そうですね。x軸とy軸の範囲は全て同じです。試行錯誤しましたが、x軸y軸の範囲が7つのファイルで全て同じなので、一度全てのファイルを読み込んで1つのファイルに落とし込む方が楽そうでした。 調べたところ、splotでファイルを何個もplotさせようとしているコードはあまり(というかほとんど)見当たりませんので、上記のやり方でやることにします。助言ありがとうございます。感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問