2
#include <vector>
#include <cmath>
#include <boost/tuple/tuple.hpp>
#include "gnuplot-iostream.h"
int main()
{
float frame[4][4];
for (int n=0; n<4; n++)
{
for (int m=0; m<4; m++)
{
frame[n][m]=n+m;
}
}
Gnuplot gp;
gp << "unset key\n";
gp << "set pm3d\n";
gp << "set hidden3d\n";
gp << "set view map\n";
gp << "set xrange [ -0.500000 : 3.50000 ] \n";
gp << "set yrange [ -0.500000 : 3.50000 ] \n";
gp << "splot '-'\n";
gp.send2d(frame);
gp.flush();
}
这产生我的图像绘制热图:与++的Gnuplot用C
的问题是,元素 “帧[0] [0]” 应该是黑色在此调色板。我认为它是黑色的,但四个点之间的区域用蓝色(这四个点的平均值的颜色)着色。 我想要什么,我可以生成这样的图像: link to gnuplot heatmap example。 它实际上是为矩阵元素着色,而不是四个元素之间的区域。 那么我该如何使用C++和iostream管道来做到这一点? 我可以打印数据到一个文件,然后从该文件进行绘图,但这可能会很慢... 任何想法?
嗨!有一个问题。 send2d()发送一个单列到gnuplot。 '图像'不喜欢它,需要三列。总之,用户通常也想通过x,y,颜色坐标。我也不确定send2d()如何知道float数组的大小。此外,该网站指出,应避免简单的数组,并喜欢'std :: vector'或类似。 见https://gitorious.org/gnuplot-iostream/pages/Datatypes – sweber 2014-11-06 11:40:33
感谢您的评论,克里斯托夫!我尝试使用“send1d()”,并以某种方式它的工作!但现在它只在关闭iostream管道后显示图形。如果我想重新绘制,我必须关闭“Gnuplot”对象并创建一个新对象,并创建一个新的绘图窗口。这似乎是我需要一些终止或卑鄙...... – 2014-11-06 12:06:45
@sweber你是对的。我没有检查'send2d()'写的格式。我认为如果它适合污点它应该适合也与图像:) – Christoph 2014-11-06 12:20:55