我有以下数据集: 这是使用 Leopardi 等人 2006 年算法的球形划分。每个网格单元都是球坐标系中的一个矩形,由左上角 (theta0,phi0) 和右下角 (theta1,phi1) 定义。我通过为每个矩形生成很多点并使用 splot 绘制所有点来绘制上面的图。但我真正想要的是用不同的纯色绘制每个矩形。
set obj 1 rect
命令。我想做的是这样的:
set obj 1 rect from spherical THETA0,PHI0,R to spherical THETA1,PHI1,R
然后对许多不同的矩形重复此操作。但当然这是行不通的,因为 gnuplot 坐标中没有“球形”选项。有一个“极坐标”选项,但它仅适用于 2D 极坐标或 3D 柱坐标。有谁知道如何用 gnuplot 绘制在球坐标中定义的彩色矩形吗?
一些评论,但没有过多讨论细节:
set mapping spherical
(选中
help mapping
)
[t=0:1]
范围内的参数函数,描述矩形的轮廓
A
,以便在由输入数据块定义的循环中绘制矩形
$Data
tmp=init(i)
将参数从数据块
$Data
获取到变量
x0,y0,dx,dy
world.dat
(需要 gnuplot>=5.2.0,因为使用数组)
### plotting spherical rectangles
reset session
set view equal xyz
set view 60,100,1.97
set isosamples 19,25
set mapping spherical
set xyplane relative 0
set angles degrees
unset key
unset border
unset tics
set parametric
set hidden3d offset 0
set urange [-90:90]
set vrange [0:360]
# LAT0 LON0 LAT1 LON1 color
$Data <<EOD
63 0 35 22 0xff0000
10 -5 -10 10 0x00cc00
52 -40 8 -25 0x0000ff
EOD
R = 6371 # earth radius
N = 32 # choose a number divisible by 4
array A[N+1] # dummy array
rectX(i,t) = t<0.25 ? 4*dx*t : t<0.5 ? dx : t<0.75 ? 4*dx*(0.75-t) : 0
rectY(i,t) = t<0.25 ? 0 : t<0.5 ? 4*dy*(t-0.25) : t<0.75 ? dy : 4*dy*(1-t)
init(i) = (x0=real(word($Data[i],2)), y0=real(word($Data[i],1)), \
dx=real(word($Data[i],4))-x0, dy=real(word($Data[i],3))-y0)
lon(i,t) = rectX(i,t) + x0
lat(i,t) = rectY(i,t) + y0
color(i) = int(word($Data[i],5))
splot R*cos(u)*cos(v), R*cos(u)*sin(v), R*sin(u) w l lc rgb "grey" , \
'world.dat' u 1:2:(R) w l lc "black", \
for [i=1:|$Data|] tmp=init(i) A u (lon(i,$0/N)):(lat(i,$0/N)): \
(R):(color(i)) w l lw 2 lc rgb var
### end of script