2017-10-19 14 views
-2
私はヒートマップを描きたい

、私は2次元配列を持っていると私はこの答えを追っ:https://stackoverflow.com/a/32459287/2370139 私はC内のgnuplotを使っ++最初の行と列は、通常の値ですので、私は「不均一」を削除したことを除いては、ダニません。ヒートマップが空白(白)ですか?

Gnuplot gp; 
gp << "set autoscale xfix \n"; 
gp << "set autoscale yfix \n"; 
gp << "set autoscale cbfix \n"; 
gp << "plot '-' matrix with image notitle\n"; 
gp.send2d(pmat); 
gp.flush(); 

pmatは、サイズ50 * 50の2次元アレイです。浮動小数点数は0と1の間で埋められます。 完全に白いグリッドをプロットしますが、何が問題なのでしょうか?

注:

0.5 0.3 0.3 
0.2 0.4 0.6 
0.2 0.8 1 

のようなテキストファイルで、通常のgnuplotのターミナルで使用する場合、上記のコマンドが正常に動作しそうな問題はdoesnのgnuplot-iostream場合はC++のAPIの私の使い方

+0

私は 'gnuplot-iostream'に慣れていませんが、[this](https://github.com/dstahlke/gnuplot-iostream/wiki/Datatypes#1d-vs-2d-data)によると、 'send2d'は行列形式で配列データを送るのではなく、新しい行や列を表す空白を持つ一次元のリストとして送信します。プロットコマンドを 'gp <<"で置き換えると、 ' - 'という行をnotitle \ n"; 'で置き換えるとどうなりますか? – user8153

+0

コメントをいただき、ありがとうございます。それは3Dグラフを描画しますが、私が望むのはヒートマップです((x、y)の色はpmat [x] [y]を表します)。 – user2370139

+0

'matrix'キーワードを削除しようとしましたか?' plot ' - "with image'だけを使用しましたか? – Christoph

答えて

0

から来なければなりませんマトリックス形式の2-Dデータを組み込みサポートしているので、簡単にコードに実装できます。何かのように

gp << "plot '-' matrix with image notitle\n"; 
for (int i = 0; i < 50; ++i) { 
    for (int j = 0; j < 50; ++j) 
     gp << pmat[i][j] << "\t"; 
    gp << "\n"; 
} 
gp.flush(); 

(テストされていない)が動作するはずです。