Тепловая карта Gnuplot с использованием pm3d и dgrid3d оставляет пустые места на графике - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь сгенерировать тепловую карту как график из данных. Данные приведены в виде

# x      y      f(x,y)
 1.02   0.98    23.943
 1.99   0.99    24.05
 .99    2.01    22.00
...

и на нем нет реальной сетки, это просто случайные точки и их конкретное значение. В противном случае я мог бы использовать такие вещи, как image, насколько я понимаю.

Чтобы проиллюстрировать мою проблему, я создал файл данных для 2d гауссовского пика (см. pastebin ). Иллюстрированные данные:

simple splot of data file

Теперь строим это, используя

set view map
set dgrid3d 50,50,2
set pm3d at b
unset key
unset surface
splot "data.txt"    # using 2d gauss data as example

дает мне сюжет, подобный следующему:

splot using pm3d, dgrid3d, map

Чего я не понимаю, так это пробелов между цветной поверхностью и фактической границей графика. Здесь показано внизу, сверху, справа и слева. Даже если я увеличу до диапазонов, где поверхность должна быть создана с помощью dgrid3d, пробелы все еще остаются с разной шириной.

Попытка построить сейчас (с настройками выше)

set isosample 100,100
splot exp(-x**2 -y**2)

дает мне график, который заполняет всю область построения. Неважно, насколько далеко я увеличу или уменьшу масштаб. Никакие пробелы нигде не появляются. См:

function plot using pm3d dgrid3d

Я нашел этот пост здесь ( Раздражающий интервал в цветовых картах gnuplot pm3d ), где op ответил, что даже при построении функции пробелы остаются:

Я только что попытался построить простой опыт (-x²), но разрыв все еще есть. : / - каменная птица 6 июня '16 в 10: 31

Однако он мог бы решить эту проблему, определив очень специфический диапазон для значений x и y. Но это не работает для меня, так как очень трудно определить, для каких значений это действительно работает.

Существует ли возможность создания тепловой карты, такой как график, из точек данных, которые заполняют всю область построения?

Использование уровня исправлений gnuplot 5.0 6

1 Ответ

0 голосов
/ 13 мая 2018

Это имманентная проблема с сеткой (+ аналогичная проблема с pm3d).От help dgrid3d:

Для построения графиков и создания контуров создается сетка с размерами, полученными из ограничивающего прямоугольника разбросанных данных и размера, заданного параметрами row / col_size.

Gnuplot сначала вырезает все точки данных, которые находятся в пределах ваших x / yranges, затем создает ограничивающие рамки для них (которые, вероятно, немного меньше), и только затем создает данные в сетке.

В идеале следуетбыть в состоянии отключить создание ограничивающего прямоугольника и сделать так, чтобы gnuplot просто создал сетку, охватывающую весь x / yrange.

Способ обойти это состоит в том, чтобы вывести данные в сетке в файл (или, поскольку gp5,на встроенный блок данных $) с помощью set table, затем выключите dgrid3d и постройте этот блок данных.Тогда вам все еще придется увеличить точно до значений min / max x / y, у которых есть точка данных (чтобы избавиться от пробелов), но вы, по крайней мере, можете легко их найти.

Oooor пропустите создание блока данных и автоматически обрежьте увеличенный вид:

  1. нанесите набор данных с помощью pm3d / dgrid3d
  2. увеличьте область, которую вы хотите иметь
  3. теперь обрежьте пустое пространство, выполнив

    set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
    set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
    replot
    

Проблема в том, что у вас снова могут быть артефакты на границе, поэтому, возможно, вы все еще хотите отделить сетку от графикакак описано выше.

    set dgrid3d
    set table $datagrid
    splot dataf
    unset table
    unset dgrid3d

    set pm3d; set view map
    splot $datagrid
    #now zoom to whatever view you would like to see

    set xrange [GPVAL_DATA_X_MIN:GPVAL_DATA_X_MAX]
    set yrange [GPVAL_DATA_Y_MIN:GPVAL_DATA_Y_MAX]
    replot

(также посмотрите в help dgrid3d, чтобы выбрать подходящий алгоритм / ядро ​​интерполяции)

...