Тепловая карта с фоновым изображением на gnuplot

Я пытаюсь построить тепловую карту с RSSI беспроводной сети, используя gnuplot. До сих пор мне это частично удавалось. Я получил следующую картину, используя следующий код:

Частичная тепловая карта

set terminal pngcairo transparent enhanced font "arial,10" fontscale 1.0 size 1440, 900
set output "teste.png"
set size ratio -1
set xrange [ -0.5 : 3510.5 ]
set yrange [ -0.5 : 2480.5 ]
set noxtic
set noytic
r(x) = x >= 0.92 ? 0.0 / 7.0 : \
       x >= 0.86 ? 1.0 / 7.0 : \
       x >= 0.80 ? 2.0 / 7.0 : \
       x >= 0.74 ? 3.0 / 7.0 : \
       x >= 0.68 ? 4.0 / 7.0 : \
       x >= 0.62 ? 5.0 / 7.0 : \
       x >= 0.56 ? 6.0 / 7.0 : 7.0 / 7.0
g(x) = x >= 0.50 ? 1.0 : \
       x >= 0.44 ? 6.0 / 7.0 : \
       x >= 0.38 ? 5.0 / 7.0 : \
       x >= 0.32 ? 4.0 / 7.0 : \
       x >= 0.26 ? 3.0 / 7.0 : \
       x >= 0.20 ? 2.0 / 7.0 : \
       x >= 0.14 ? 1.0 / 7.0 : \
       x == 0.00 ? 1.0 : 0.0
b(x) = x == 0.0 ? 1.0 : 0.0
set cbrange [ -99 : -49 ]
set cblabel "Intensidade (dBm)"
set cbtics -95, 3, -50
set palette function r(gray), g(gray), b(gray)
set colorbox horizontal user origin 0.7, 0.94 size 0.2, 0.01
plot "dados.dat" matrix title "Wireless A" with image

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

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

Большое спасибо.


person Luís Fernando Quitaiski    schedule 09.06.2013    source источник
comment
Возможно, этот пример вас заинтересует.   -  person Schorsch    schedule 10.06.2013
comment
Спасибо за ответ @Schorsch, это похоже на то, что я хочу сделать, но карта находится в другом источнике данных: в примере мир представляет собой последовательность точек, которые будут нарисованы в виде линии, а источник моей карты является изображением. Я не могу просто наложить изображение в качестве примера, потому что изображение перекроет тепловую карту. Я попытался установить белый цвет как прозрачный перед его наложением, но это создает некоторые артефакты на краях линий (вероятно, результат некоторого сглаживания, примененного ранее к изображению, которое я использую в качестве карты).   -  person Luís Fernando Quitaiski    schedule 28.06.2013
comment
Единственный способ использовать прозрачность для тепловых карт — использовать стиль построения with rgbalpha, но тогда вы не сможете использовать определенную палитру для цветов. Но так как вы все равно определили свои собственные функции для красного, зеленого и синего, это не проблема. Но это также означает некоторую возню с цветовыми диапазонами и прочее, чтобы получить правильную цветовую палитру. Чтобы сначала нарисовать фоновое изображение, вы можете использовать что-то вроде plot 'bg.png' binary filetype=png w rgbimage, "dados.dat" using 1:2:(rsc($3)):(gsc($3)):(bsc($4)):(127) with rgbalpha. rsc и т.д. - это ваша функция r(x) с адекватным масштабированием.   -  person Christoph    schedule 14.08.2013


Ответы (1)


это может быть интересно: http://gnuplot-surprising.blogspot.de/2011/09/gnuplot-background-image.html

он показывает, как заставить gnuplot отображать PNG. предполагая, что можно поместить это изображение «позади» (в терминологии gnuplot) и получить координаты для выравнивания (здесь могут быть уместны бинарные ключевые слова gnuplot «dx», «dy», «dz» и «origin»), это может решить твоя проблема.

person Greg Minshall    schedule 28.08.2016