Тепловая карта гнуплота с разными масштабами

У меня проблемы с созданием тепловой карты с gnuplot для данных разных масштабов.

Рассмотрим следующий примерный набор данных:

0.100    1.000     10.0
0.010    1.000     20.0
0.001    1.000     40.0

0.100    10.00     20.0
0.010    10.00     40.0
0.001    10.00     80.0

0.100    100.0     40.0
0.010    100.0     80.0
0.001    100.0    160.0

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

Пожалуйста, найдите ниже иллюстрирующий пример. Только второй график дает мне правильные значения тепловой карты (высокие значения в верхнем левом углу, низкие значения в нижнем правом углу):

set multiplot layout 2,1

set pm3d
set dgrid3d 20,20
set view map

set xlabel 'unscaled'
splot 'data.dat' u 1:2:3

set xlabel 'scaled by factor 1000'
splot 'data.dat' u ($1*1000):2:3

Как я могу добиться этого также для немасштабированных значений?

Любая помощь приветствуется. Большое спасибо.

2 ответа

Ну вот:

set dgrid3d 20,20
set pm3d explicit
set view map

set table "interpolated_data.dat"

splot 'data.dat' using ($1*1000):2:3

set output 'heatmap.png'
set terminal pngcairo

set multiplot layout 2,1

unset table
unset dgrid3d
set pm3d
unset surface

set xlabel 'scaled by factor 1000'
splot 'interpolated_data.dat' u 1:2:3

set xlabel 'unscaled'
splot 'interpolated_data.dat' u ($1/1000):2:3

Масштабный сюжет выглядит правильно, но я не уверен, что он действительно правильный. По крайней мере, в левом нижнем углу, кажется, есть артефакт, локальный максимум, которого, вероятно, не должно быть. Вы можете увидеть это лучше, если вы удалите set view map:

оригинальный сюжет

Я думаю, что причина в dgrid3d, Это делает некоторое взвешивание соседних точек, что может привести к неожиданным результатам.

Мое предложение будет использовать линейную интерполяцию, удалив set dgrid3d 20,20 и используя set pm3d interpolate 20,20, Это дает следующую картину:

линейная интерполяция

Наконец, ваши данные как-то просят, по крайней мере, попробовать график масштаба:

интерполировать и логарифмировать

Мой сценарий для последнего сюжета выглядит следующим образом. Ничего особенного по сравнению с твоим. Я должен был указать xrange для немасштабированного графика, и он длиннее из-за 4 графиков.

reset
set terminal png size 1200,800
set output "data_log.png"

set logscale x
set logscale y

set multiplot layout 2,2 title "With \"interpolate\" and logscale"

set pm3d at s interpolate 20,20
set hidden3d

set xlabel 'unscaled'
set origin 0.5,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x

set xlabel 'scaled by factor 1000'
set origin 0.5,0.0
splot 'data.dat' u ($1*1000):2:3 notitle

set view map

set xlabel 'unscaled'
set origin 0.0,0.5
set xrange [0.001:0.1]
splot 'data.dat' u 1:2:3 notitle
set autoscale x

set xlabel 'scaled by factor 1000'
set origin 0.0,0.0
splot 'data.dat' u ($1*1000):2:3 notitle

unset multiplot
set output
Другие вопросы по тегам