Gnuplot 5.2 splot:一次绘图调用中的多个 pm3d 调色板
Gnuplot 5.2 splot: Multiple pm3d palette in one plot call
我想知道,我可以在 splot 中使用两个不同的 pm3d 调色板吗?我使用 Gnuplot 5.2 和
想要显示两个 3D 表面,例如具有不同调色板的海洋和陆地。我可以这样定义它吗:
splot "file" u 1:2:3 with pm3d palette 1, "file" 1:2:4 with pm3d palette 2
第1列和第2列的数据是从0到100的整数,它们定义了一个网格。不同地图的边界可能不同。 z 轴值是实数,表示对数刻度上的相对变化,范围从 -10 到 10。
以下可能是适合您的解决方案。我看不到如何在 splot
命令中更改调色板。因此,解决方法的基本思想是通过可以为每个 splot
-(sub) 命令设置不同的公式设置线条颜色。我希望你能根据你的需要改编下面的例子。
同时选中 help rgbformulae
并键入 show palette rgbformulae
,这将显示调色板背后的公式。
代码:
### multiple "palettes" within one splot command
reset session
set samples 101,101
set isosamples 101,101
f(x,y) = sin(1.3*x)*cos(0.9*y)+cos(.8*x)*sin(1.9*y)+cos(y*.2*x)
set table $Data01
splot f(x,y)
unset table
g(x,y) = y
set table $Data02
splot g(x,y)
unset table
h(x,y) = 0.5*x
set table $Data03
splot h(x,y)
unset table
Zmin = -3
Zmax= 3
set xrange[-5:5]
set yrange[-5:5]
set zrange[Zmin:Zmax]
set hidden3d
set angle degree
Frac(z) = (z-Zmin)/(Zmax-Zmin)
# MyPalette01
Red01(z) = 65536 * ( Frac(z) > 0.75 ? 255 : int(255*abs(2*Frac(z)-0.5)))
Green01(z) = int(255*sin(180*Frac(z)))*256
Blue01(z) = int(255*cos(90*Frac(z)))
MyPalette01(z) = Red01(z) + Green01(z) + Blue01(z)
# MyPalette02
Red02(z) = 65536 * int(255*Frac(z))
Green02(z) = 256 * (Frac(z) > 0.333 ? 255 : int(255*Frac(z)*3))
Blue02(z) = (Frac(z) > 0.5 ? 255 : int(255*Frac(z)*2))
MyPalette02(z) = Red02(z) + Green02(z) + Blue02(z)
# MyPalette03
Red03(z) = 65536 * (Frac(z) > 0.5 ? 255 : int(255*Frac(z)*2))
Green03(z) = 256 * (Frac(z) > 0.333 ? 255 : int(255*Frac(z)*3))
Blue03(z) = int(255*Frac(z))
MyPalette03(z) = Red03(z) + Green03(z) + Blue03(z)
set view 44,316
splot $Data01 u 1:2:3:(MyPalette01()) w l lc rgb var notitle, \
$Data02 u 1:2:3:(MyPalette02()) w l lc rgb var notitle, \
$Data03 u 1:2:3:(MyPalette03()) w l lc rgb var notitle
### end of code
结果:
我想知道,我可以在 splot 中使用两个不同的 pm3d 调色板吗?我使用 Gnuplot 5.2 和 想要显示两个 3D 表面,例如具有不同调色板的海洋和陆地。我可以这样定义它吗:
splot "file" u 1:2:3 with pm3d palette 1, "file" 1:2:4 with pm3d palette 2
第1列和第2列的数据是从0到100的整数,它们定义了一个网格。不同地图的边界可能不同。 z 轴值是实数,表示对数刻度上的相对变化,范围从 -10 到 10。
以下可能是适合您的解决方案。我看不到如何在 splot
命令中更改调色板。因此,解决方法的基本思想是通过可以为每个 splot
-(sub) 命令设置不同的公式设置线条颜色。我希望你能根据你的需要改编下面的例子。
同时选中 help rgbformulae
并键入 show palette rgbformulae
,这将显示调色板背后的公式。
代码:
### multiple "palettes" within one splot command
reset session
set samples 101,101
set isosamples 101,101
f(x,y) = sin(1.3*x)*cos(0.9*y)+cos(.8*x)*sin(1.9*y)+cos(y*.2*x)
set table $Data01
splot f(x,y)
unset table
g(x,y) = y
set table $Data02
splot g(x,y)
unset table
h(x,y) = 0.5*x
set table $Data03
splot h(x,y)
unset table
Zmin = -3
Zmax= 3
set xrange[-5:5]
set yrange[-5:5]
set zrange[Zmin:Zmax]
set hidden3d
set angle degree
Frac(z) = (z-Zmin)/(Zmax-Zmin)
# MyPalette01
Red01(z) = 65536 * ( Frac(z) > 0.75 ? 255 : int(255*abs(2*Frac(z)-0.5)))
Green01(z) = int(255*sin(180*Frac(z)))*256
Blue01(z) = int(255*cos(90*Frac(z)))
MyPalette01(z) = Red01(z) + Green01(z) + Blue01(z)
# MyPalette02
Red02(z) = 65536 * int(255*Frac(z))
Green02(z) = 256 * (Frac(z) > 0.333 ? 255 : int(255*Frac(z)*3))
Blue02(z) = (Frac(z) > 0.5 ? 255 : int(255*Frac(z)*2))
MyPalette02(z) = Red02(z) + Green02(z) + Blue02(z)
# MyPalette03
Red03(z) = 65536 * (Frac(z) > 0.5 ? 255 : int(255*Frac(z)*2))
Green03(z) = 256 * (Frac(z) > 0.333 ? 255 : int(255*Frac(z)*3))
Blue03(z) = int(255*Frac(z))
MyPalette03(z) = Red03(z) + Green03(z) + Blue03(z)
set view 44,316
splot $Data01 u 1:2:3:(MyPalette01()) w l lc rgb var notitle, \
$Data02 u 1:2:3:(MyPalette02()) w l lc rgb var notitle, \
$Data03 u 1:2:3:(MyPalette03()) w l lc rgb var notitle
### end of code
结果: