gnuplot 2D极坐标图和来自3D数据集的热图-可能吗?

gnuplot 2D极坐标图和来自3D数据集的热图-可能吗?,gnuplot,heatmap,Gnuplot,Heatmap,我想用笛卡尔坐标系绘制一个三维曲面图,并将其作为极坐标系下的二维热图。原因是我正在获取坐标系中某个系统的数据。我只找到了一些相关的例子,但我一直在努力让它与我的数据一起工作。我目前使用的是矩阵格式,如果这有助于图表正常工作,我可以重新格式化数据集 数据是在扬声器上进行的SPL测量。将麦克风放置在固定距离(例如固定半径)处,并在整个扬声器周围水平每隔10度进行测量。SPL测量值是频率的函数,从20Hz到20kHz 我想使用gnuplot创建一个二维极坐标图。频率将绘制为半径,扬声器周围的角度将是角

我想用笛卡尔坐标系绘制一个三维曲面图,并将其作为极坐标系下的二维热图。原因是我正在获取坐标系中某个系统的数据。我只找到了一些相关的例子,但我一直在努力让它与我的数据一起工作。我目前使用的是矩阵格式,如果这有助于图表正常工作,我可以重新格式化数据集

数据是在扬声器上进行的SPL测量。将麦克风放置在固定距离(例如固定半径)处,并在整个扬声器周围水平每隔10度进行测量。SPL测量值是频率的函数,从20Hz到20kHz

我想使用gnuplot创建一个二维极坐标图。频率将绘制为半径,扬声器周围的角度将是角度,“高度”将是SPL水平。这将生成一个曲面,但是,我想创建一个热图pm3d,然后从上面查看(例如,视图0,0)或作为2D绘图。我还需要添加显示SPL间隔的等高线,并将其叠加在热图上

我在这里找到了类似于笛卡尔坐标的东西: 当我尝试使用极坐标进行最终2D绘图时,我收到一条错误消息,即极坐标绘图不支持“with image”选项。有人能试试这个或确认一下吗

我已经能够使用splot和正上方的视图(设置视图0.0)将我的极地数据绘制为热图+三维等高线。如果我首先将现有极坐标数据转换为笛卡尔坐标,我可能会得到类似于此网页所示的内容: 我也可以从上面查看,但我想添加极轴栅格,并为角度和半径添加标签。我是否必须手动执行此操作,或者是否可以使用multiplot覆盖二维栅格和从0.0查看的三维绘图

我不知道如何处理这个问题。如果您有任何关于采取什么方向的建议,我们将不胜感激


-Charlie

与排列任何位图图像一样,
图像
打印仅适用于均匀分布的矩形网格。否则,您必须将
splot
pm3d
一起使用

set grid polar
仅适用于二维,因此必须使用
multiplot
将热图与极坐标栅格重叠。下面是一个相当长的示例,向您展示它的工作原理:

reset
set terminal pngcairo size 800,800
set output '3d-polar.png'

set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9

set pm3d map
unset key

set multiplot

# plot the heatmap
set parametric
set isosamples 500

unset border
unset xtics
unset ytics

set angles degree
r = 6
set urange[0:r] # radius
set vrange[0:360] # angle
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8
splot u*cos(v), u*sin(v), (cos(v)*besj0(2*u))**2

# now plot the polar grid only
set style line 11 lc rgb 'white' lw 2
set grid polar ls 11
set polar
set rrange[0:r]
unset raxis
set rtics format '' scale 0
unset parametric
set for [i=0:330:30] label at first (r+0.35)*cos(i), first (r+0.35)*sin(i)\
center sprintf('%d', i)
plot NaN w l
unset multiplot
结果是:

下面是一些技巧的细节:

  • 为了获得正方形大小,您不能使用
    设置大小比率1
    ,因为2D和3D绘图的边距不同,即使您要指定一些绝对边距。因此,我设置了一个正方形画布大小(终端选项
    size 800800
    ),并设置了适当的绝对边距

  • 您不能
    取消rtics
    ,因为这样网格就会消失

  • 栅格标签必须手动设置

  • 颜色框也是手动设置的,因为否则它会与
    0
    标签重叠

  • 打印
    NaN
    仅打印网格


我把Christoph发布的命令文件拿了出来,放了一段时间,设法让它满足我的需要,但标签除外,我仍然有问题。情节是这样的:

为了得到这个结果,我必须重新计算测量数据的坐标,将它们从极坐标系(频率=r,θ=离轴角度,z=SPL)更改为笛卡尔坐标系(x,y,z)。同时,我修改了极坐标网格的显示方式。虽然我想要一个对数极坐标r轴,但必须对pm3d数据使用笛卡尔坐标,所以在使用r数据计算x、y、z坐标之前,我先获取了r数据的日志。此外,我知道极坐标对数r轴刻度的最小值为10,当使用对数刻度极坐标栅格时,这似乎被设置为等于绘图中心。为了使网格和曲面数据正确对齐,我从r值中减去log10(10),然后使用它们计算用于pm3d地图的笛卡尔坐标。总的来说,我用的方程是

r = log10( frequency ) - 1
x = r cos( theta )
y = r sin( theta )
z = SPL
然后,我使用以下命令文件绘制数据:

reset 
set terminal pngcairo size 800,800 
set output '3d-polar.png'
set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9
set pm3d map interpolate 20,20
unset key
set multiplot

# plot the heatmap

set cntrparam levels increment 3,-3, -24
set contour surface
set palette rgb 33,13,10 #rainbow (blue-green-yellow-red)
set cbrange [-18:0]
unset border
unset xtics
unset ytics
set angles degree
r = 3.31
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8
splot 'new_test.dat' using 1:2:3

# now plot the polar grid only
set style line 11 lc rgb 'black' lw 1 lt 0
set grid polar ls 11
set polar
set logscale r 10
set rrange[10:20000]
unset raxis
set rtics format '' scale 0
set rtics (10,20,100,200,1000,2000,10000,20000)
#unset parametric
#set for [i=0:330:30] label at first (r+0.35)*cos(i), first (r+0.35)*sin(i) \
#center sprintf('%d', i)

plot NaN w l

unset multiplot
unset output
用于生成绘图的数据仅跨+/-30度,因此只有该扇区填充极坐标图。其他角度数据可用于填充绘图


如果我能在标签方面得到一些帮助,我可以称之为“完成”。我仍然需要得到角度工作的标签。关于如何标记极轴r轴tics的输入也非常受欢迎

我能够在我的构建(Win32:Version4.7PatchLevel 0)中实现所有功能,除了:带有sprintf的行生成一个错误,上面写着“undefined variable:at”。另外,我需要提供一个数据文件,我对文件格式有些困惑。这是否应该是x、y、z数据点(连续数据)?我可以使用矩阵格式吗?更具体地说,我如何获取输入数据文件(频率、角度、SPL)并使用参数模式u和v以极坐标形式进行转换。我想这就是为什么Christoph对数据使用函数形式的原因。但我需要使用文件中的点,我想了解这应该如何工作。谢谢再考虑一下输入数据,似乎参数模式命令与此无关。。。它们只是用于构建极坐标数据集。我想我必须用x=rcos(θ),y=rsin(θ),z将已经是极坐标形式(r,θ,z)的数据转换成笛卡尔形式。然后我将能够在splot命令中直接使用它。我尝试了类似于“splot”矩阵的东西。dat“使用1*cos(2):1*sin(2):3的非均匀矩阵”和“splot”矩阵。dat“使用$1*cos($2):$1*sin($2):$3的非均匀矩阵”,但这些都没有