Гистограмма полярных координат Gnuplot - PullRequest
2 голосов
/ 17 июня 2020

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

enter image description here

1 Ответ

2 голосов
/ 18 июня 2020

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

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

Допущения:

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

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

  • автоматически c извлечение 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

Результат:

enter image description here

...