Gnuplot极坐标图直方图

时间:2020-06-17 19:35:08

标签: gnuplot histogram color-mapping

我有一个数据文件file.dat,其中包含平面中各点的三列(半径,角度,温度),我想使用极坐标和彩色图将数据绘制为直方图,如图所示下面,但使用gnuplot。我可以使用所需的bin值创建一个histogram.dat文件,但我不知道如何在gnuplot中绘制该文件

enter image description here

1 个答案:

答案 0 :(得分:2)

据我所知,gnuplot中没有立竿见影的“极性热图”绘图样式(但是我可能是错的,至少,我在演示页面上没有看到示例)。因此,您必须自己实施。

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

假设:

  • 数据以规则的网格/角度(astep和半径(rstep)为步长。
  • 数据位于数据块中(如何将其从文件获取到数据块中,请参见gnuplot: load datafile 1:1 into datablock
  • 分隔符是空格
  • 没有标题行

进一步的优化潜力:

  • 自动提取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

结果:

enter image description here