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行
进一步的优化潜力:
- 自动提取
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
结果:
我有一个数据文件 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行
进一步的优化潜力:
- 自动提取
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
结果: