У меня есть файл данных file.dat
с тремя столбцами (радио, угол, температура) для точек на плоскости, и я хочу построить эти данные в виде гистограммы с использованием полярных координат и цветовых карт, как на рисунке ниже, но с использованием gnuplot. Я могу создать histogram.dat
файл со значениями ячеек, которые мне нужны, но я не знаю, как построить его в gnuplot.
Гистограмма полярных координат Gnuplot
Ответы (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