表面顶部轮廓的渐近线三维图

表面顶部轮廓的渐近线三维图

我正在尝试使用 Asymptote 绘制 3D 图形。我使用了之前的一篇文章作为指导

我在 2 个文件中有结构良好的 X、Y 和 Z 值。一个文件包含 x 和 y 变量,另一个文件包含 z 矩阵。所有计算均使用 R 执行。我仅使用 Asymptote 进行绘图。

以下是迄今为止尝试过的 Asymptote 代码:

import three;
import grid3;
import graph3;
import palette;

unitsize(5cm,5cm,5cm);
currentprojection=orthographic(18,17,3);

bool renderPRC = true; 

if(renderPRC) { ...
    // PRC TRUE
    settings.prc=true;
    settings.embed=true;
}
else {
    // RASTERIZE
    settings.outformat="png";
    settings.prc=false;
    settings.render=3;
}

file fic =input("xy_new.csv").line().csv(); 
file fic1 =input("z_new.csv").line().csv();

real[][] z=fic1.dimension(0,100);
real[][] a=fic.dimension(0,2);
real [][] b=transpose(a);

real [] xpt,ypt;
xpt = b[1];
ypt = b[0];
real[][] zpt=-z;

surface s=surface(zpt,xpt,ypt,Spline);
s.colors(palette(s.map(zpart),Rainbow()));
draw(s);

我得到的输出不是 3D 文件。

在此处输入图片描述

我期待这样的事情:

在此处输入图片描述

上面的图是使用以下R函数以相同的 x、y 和 z 值生成的:

plot3D::persp3D(x = x, y = y, z = -1*z, col="grey87",cex.axis=1, cex.lab=1,
        colkey=FALSE, theta=-30,alpha = 1,zlim=c(-500,-240),ylim=c(0.2,5),
        border = "grey50", ticktype="detailed",scale=T,
        contour=list(levels = -1*c(240,242.09,242.3,242.8,243,244,245,246,247,247.5,247.8),side ="z",col="grey39"),
        xlab="$\\sigma$",ylab="$\\xi$", zlab="Log Likelihood",
        lty=0,expand = 0.7)

我有两部分问题:

  1. 为什么我的渐近线图不是三维的?
  2. 如何在曲面图上绘制轮廓?

答案1

抱歉来晚了,但是很难有空闲时间来为 Asymptote 问题做出贡献。

您的主要问题是unitsizex、y、z 范围之间的差异。这就是为什么您有这样的图片。然后您有两种可能性:修改unitsize或使用size3IgnoreAspect避免自动缩放)。我还添加了轮廓问题。

import grid3;
import graph3;
import palette;
import contour; 
import x11colors; 
//unitsize(2cm,.002cm,.05cm);
size3(300,300,IgnoreAspect);

currentprojection=orthographic(18,17,3);

currentprojection=orthographic(camera=(-15.2232850051446,-32914.6837071317,892.991504793621),
                               zoom=0.822702474791882);

file fic =input("xy_new.csv").line().csv(); 
file fic1 =input("z_new.csv").line().csv();

real[][] z=fic1.dimension(0,100);
real[][] a=fic.dimension(0,2);
real [][] b=transpose(a);

real [] xpt,ypt;
xpt = b[1];
ypt = b[0];
real[][] zpt=-z;

surface s=surface(zpt,xpt,ypt,Spline);
s.colors(palette(s.map(zpart),Rainbow()));
draw(s);


for (int i=0; i<10 ; ++i)
  { real t = -250+i; 
    guide[][] contours = contour(zpt,(0.2,100),(5,5000),new real[]{t},join=operator ..);
    guide3[][] liftedcontours = lift(new real (real x, real y) {return t;}, contours);
    for(guide3 p:liftedcontours[0]){
      draw(p,blue+1bp);
    }
  }

xaxis3(Label("$x$",.1),Bounds,InTicks);
yaxis3(Label("$y$",0.5),Bounds,InTicks);
zaxis3(Label("$z$",0.5),Bounds,InTicks(beginlabel=false));

然后结果在此处输入图片描述

相关内容