#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();
}
Это создает мне изображение:
Проблема в том, что элемент «frame [0] [0]» должен быть черным в этой цветовой палитре. И я предполагаю, что это черный, но область между четырьмя точками окрашена в синий (цвет для среднего значения этих четырех точек).
Что я хочу, чтобы я мог генерировать изображение, как это:
ссылка на пример тепловой карты gnuplot.
На самом деле он окрашивает матричный элемент, а не область между четырьмя элементами.
Так как мне это сделать, используя C ++ и канал iostream?
Я могу распечатать данные в файл, а затем построить из этого файла, но это может быть медленным …
Есть идеи?
Вы должны использовать image
стиль печати, как на демонстрационной странице, на которую вы ссылаетесь:
#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 autoscale fix\n";
gp << "plot '-' with image\n";
gp.send2d(frame);
gp.flush();
}
Я не могу проверить это прямо сейчас, но это должно сработать. Может быть, вам нужно изменить set autoscale
часть, чтобы соответствовать вашим потребностям. С помощью set autoscale fix
использует узкие диапазоны для всех осей (x, y и цвет).