Гистограмма полярных координат Gnuplot

У меня есть файл данных file.dat с тремя столбцами (радио, угол, температура) для точек на плоскости, и я хочу построить эти данные в виде гистограммы с использованием полярных координат и цветовых карт, как на рисунке ниже, но с использованием gnuplot. Я могу создать histogram.dat файл со значениями ячеек, которые мне нужны, но я не знаю, как построить его в gnuplot.

введите описание изображения здесь


person user239504    schedule 17.06.2020    source источник


Ответы (1)


Насколько мне известно, в gnuplot не существует сразу стиля построения "полярной тепловой карты" (но я могу ошибаться, по крайней мере, я не видел примера на демонстрационной странице). Следовательно, вы должны реализовать это самостоятельно.

По сути, для каждой точки данных вы должны построить заполненный сегмент. Следовательно, для каждой точки данных вы должны создать точки на окружности этого единственного сегмента. Затем вы можете нанести этот сегмент with filledcurves и указать определенный цвет.

Предположения:

  • данные в регулярной сетке / шагах по углу (astep) и радиусу (rstep).
  • данные находятся в блоке данных (как получить их из файла в блок данных, см. gnuplot: загрузить файл данных 1: 1 в блок данных)
  • разделители - это пробелы
  • нет строк заголовка

Возможности дальнейшей оптимизации:

  • автоматическое извлечение astep и rstep.

Надеюсь, вы сможете адаптировать код под свои нужды.

Код:

### workaround for polar heatmap
reset session

set size square
set angle degrees
unset border
unset tics
set cbtics
set polar
set border polar
unset raxis

# create some test data
f(a,r) = r*cos(a) * r*sin(a) + rand(0)*100
set print $Data
    do for [a=0:350:10] {
        do for [r=1:20] {
            print sprintf("%g %g %g",a,r,f(a,r))
        }
    }
set print

astep = 10
rstep = 1

# create the segments for each datapoint
set print $PolarHeatmap
    do for [i=1:|$Data|] {
        a = real(word($Data[i],1))
        r = real(word($Data[i],2))
        c = real(word($Data[i],3))
        do for [j=-5:5] {
            print sprintf("%g %g %g",a+j*astep/10., r-0.5*rstep, c)
        }
        do for [j=5:-5:-1] {
            print sprintf("%g %g %g",a+j*astep/10., r+0.5*rstep, c)
        }
        print ""
        print ""
    }
set print

set style fill noborder
set palette defined (0 "blue", 1 "grey", 2 "green")

plot $PolarHeatmap u 1:2:3 w filledcurves palette notitle
### end of code

Результат:

введите описание изображения здесь

person theozh    schedule 18.06.2020