Gnuplot 极坐标直方图

Gnuplot Polar Coodinates Histogram

我有一个数据文件 file.dat,其中包含三列(辐射、角度、温度)用于平面中的点,我想使用极坐标和颜色图将此数据绘制为直方图,例如下图,但使用 gnuplot。我可以用我想要的 bins 的值创建一个 histogram.dat 文件,但我不知道如何在 gnuplot

中绘制它

据我所知,gnuplot 中没有 right-away "polar heatmap" 绘图样式(但我可能是错的,至少,我没有在演示页面上看到示例)。因此,您必须自己实施它。

基本上,您必须为每个数据点绘制一个填充线段。因此,对于每个数据点,您必须在此单个线段的圆周上创建点。然后你可以绘制这个段 with filledcurves 和特定的颜色。

假设:

  • 数据在角度 (astep) 和半径 (rstep) 中是规则的 grid/steps。
  • 数据在数据块中(如何将其从文件中获取到数据块中,参见gnuplot: load datafile 1:1 into datablock
  • 分隔符是空格
  • 没有header行

进一步的优化潜力:

  • 自动提取asteprstep

希望您能根据自己的需要调整代码。

代码:

### 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

结果: