【问题标题】:Is it possible in Gnuplot to plot a 2D plot on the xyplane under a surface plot?在 Gnuplot 中是否可以在曲面图下的 xyplane 上绘制 2D 图?
【发布时间】:2021-03-06 18:22:51
【问题描述】:

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

我有表面图,现在我想在它下面分别绘制:

我尝试在曲面图中将 2D 图像绘制为二进制图,但每个像素在坐标系中被解释为一个整体单元,这是不正确的,它最终会复制坐标轴和绘图标题,同样,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"

【问题讨论】:

  • 我很困惑。您从哪里获得表面数据,即pdfFile 是什么?这些数据看起来如何?这是二维散点数据的密度图吗?能举个例子吗?
  • @theozh 是的。表面图是从散点图中提取样本的联合密度图 - 我是从 C++ 程序生成的。表面根据在该点哪个类的边际密度较大而着色。这是pdfFile 的示例:pastebin.com/XMhBLeW5。

标签: plot gnuplot


【解决方案1】:

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

代码:

### 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

结果:

【讨论】:

  • 我知道我可以在 xyplane 上绘制轮廓,但我想知道我是否可以绘制任意二维图,例如散点图。在原始图中,折线图不是等高线 - 它们是椭圆,显示分布的主轴和通过外部程序找到的决策边界。
  • @OttovonBisquick 好的,那么这些椭圆的数据看起来如何?请给出一些示例数据。也许两列中的简单 x,y 值?然后,正如 Ethan 所示,只需在括号中添加一个固定的 z 坐标,例如splot 'YourFile' u 1:2:(YourZLevel) w l ... .
【解决方案2】:

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

并非所有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多