在 Gnuplot 中是否可以在曲面图下的 xy 平面上绘制二维图?

Is it possible in Gnuplot to plot a 2D plot on the xyplane under a surface plot?

我正在尝试创建类似于这些图的内容:

我有表面图,现在我想在它下面单独绘制:

我试过在曲面图中将二维图像绘制为二进制图,但每个像素都被解释为坐标系中的一个整体单元,这是不正确的,它最终会复制坐标轴和绘图标题等。此外,gnuplot 的 xyplane 不一定位于 z=0,因此仅使用 splot 通常使用 z 值为 0 进行绘图也不能满足我的要求。

到目前为止,这些是我的绘图文件:

二维散点图:

set terminal png enhanced size 8000, 4800 truecolor font "arial,60"
set encoding utf8
set output outfile

set autoscale fix

set border lw 3
set style fill transparent solid 0.075 noborder
set style circle radius 0.03

set title plotTitle

plot sample1 u 1:2 w circles notitle,\
     sample2 u 1:2 w circles notitle,\
     $ContourTable w lines lw 6 lc rgb 'black' notitle,\
     keyentry w circles fill solid 1.0 noborder lc 1 title "ω_1",\
     keyentry w circles fill solid 1.0 noborder lc 2 title "ω_2"

曲面图:

set terminal png enhanced size 8000, 4800 truecolor font "arial,60"
set encoding utf8
set output outfile

set autoscale fix
set border lw 3
set title plotTitle
set isosamples 100
set pm3d at s explicit hidden3d
unset hidden3d
set palette model RGB define (1 "dark-violet", 2 "#009e73")

splot pdfFile u 1:2:3:4 w pm3d lc rgb "black"

也许是这样的?可能需要适应您的数据并进一步微调。

代码:

### surface plot with contour
reset session

GaussW3D(x,y,x0,y0,A,FWHM) = A * exp(-(x-x0)**2/(2*(FWHM/(2*sqrt(2*log(2))))**2)) *\
                                 exp(-(y-y0)**2/(2*(FWHM/(2*sqrt(2*log(2))))**2))
                                 
set samples 40
set isosamples 40

f(x,y) = GaussW3D(x,y,4,4,1,5) + GaussW3D(x,y,0,0,1.5,3)
set contour base
set cntrparam levels 10
set hidden3d
set xyplane at -2
set ztics 0.5

splot sample [-4:10][-7:10] '++' u 1:2:(f(x,y)) w l

### end of code

结果:

虽然 gnuplot 自动选择的基准平面可能不明显,但您可以使用命令 set xyplane at <z-value> 将其设置在您喜欢的任何位置。这是一个改编自在线演示集的示例(random.dem 中的第 3 个图)

并非 2D 绘图使用的所有绘图样式在 3D 中也受支持,但其中很多是。

#
# The surface plot shows a two variable multivariate probability"
# density function.  On the x-y plane are some samples of the random"
# vector and a contour plot illustrating the correlation, which in"
# this case is zero, i.e. a circle.  (Easier to view in map mode.)"
#
nsamp = 50

# Generate N random data points.
set print $random
do for [i=1:nsamp] {
    print sprintf("%8.5g %8.5g", invnorm(rand(0)), invnorm(rand(0)))
}
unset print
#
unset xlabel
unset ylabel
unset zlabel
set parametric
tstring(n) = sprintf("%d random samples from a 2D Gaussian PDF with\nunit variance, zero mean and no dependence", n)
set title tstring(nsamp)
unset key
set hidden3d
set contour
set view 68, 28, 1, 1
set cntrparam levels discrete 0.1
unset clabel
set xrange [-3:3]
set yrange [-3:3]
set zrange [-0.2:0.2]
set ztics 0,0.05
set urange [-3:3]
set vrange [-3:3]
set isosamples 30

BASE = -0.2
set xyplane at BASE
splot u,v,( 1/(2*pi) * exp(-0.5 * (u**2 + v**2)) ) with line lc rgb "black", \
   $random using 1:2:(BASE) with points pointtype 7 lc rgb "slategray" nocontour