2017-10-19 74 views
-2

我想繪製一個熱圖,我有一個2D數組,我遵循這個答案: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的二維數組。它充滿了介於0和1之間的浮點值。 它的確繪製了一個完美的白色網格,問題是什麼?

注:在正常gnuplot的終端使用時與像

0.5 0.3 0.3 
0.2 0.4 0.6 
0.2 0.8 1 

所以這個問題有一個文本文件來從我作爲C使用上述命令做工精細++ API

+0

我不熟悉'gnuplot-iostream',但根據[this](https://github.com/dstahlke/gnuplot-iostream/wiki/Datatypes#1d-vs-2d-data),似乎'send2d'不以矩陣形式發送數組數據,而是以空格代表新行或列的一維列表。如果你用'gp <<「splot' - '用行notitle \ n」;'替換你的繪圖命令,會發生什麼? – user8153

+0

感謝您的評論,它確實適用於該行,但它繪製了一個3D圖形,而我想要的是一個熱圖(在(x,y)處的顏色代表pmat [x] [y])。 – user2370139

+0

您是否簡單地嘗試刪除'matrix'關鍵字,即僅使用'plot「 - 」with image'? – Christoph

回答

0

如果gnuplot-iostream沒有按沒有內置的矩陣格式二維數據支持,您可以在代碼中輕鬆實現。像

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(); 

(未測試)應該工作。