在matlab中用surf重建三维图形?

在matlab中用surf重建三维图形?,matlab,Matlab,我通常使用surf函数在matlab中绘制3D图形,但是现在数据不同了,所以我使用plot3,我有下图。你知道我如何重建这个图形,即使使用不同的函数,也能更容易理解吗。 更简洁地说,我有X个值,每个X值都有Y和Z X = [ 1 ;2 ;4; 8; 16; 32; 64]; Z = [ 1; 1.8 ; 3.46 ; 6.74 ; 13.18 ; 24.34 ; 39.33] Y = [0 ; 56.92 ; 91 ; 109.95 ; 119 ; 123.57 ; 125.51] fig =

我通常使用
surf
函数在matlab中绘制3D图形,但是现在数据不同了,所以我使用
plot3
,我有下图。你知道我如何重建这个图形,即使使用不同的函数,也能更容易理解吗。 更简洁地说,我有X个值,每个X值都有Y和Z

X = [ 1 ;2 ;4; 8; 16; 32; 64];
Z = [ 1; 1.8 ; 3.46 ; 6.74 ; 13.18 ; 24.34 ; 39.33]
Y = [0 ; 56.92 ; 91 ; 109.95 ; 119 ; 123.57 ; 125.51]
fig = plot3(log(X),Y,Z,'b.-');
XLABEL=[  1 2 4 8 16 32 64];
set(gca,'XTickLabel',XLABEL);
set(gca,'XTick',log(XLABEL));

YLABEL= [ 0 30 60 90 120 150 180];
set(gca,'YTickLabel',YLABEL);
set(gca,'YTick',YLABEL);

ZLABEL= [0 5 10 15 20 25 30 35 40 45 50 55];
set(gca,'ZTickLabel',ZLABEL);
set(gca,'ZTick',(ZLABEL));
ylim([0 180]);
zlim([0,55]);

grid on


很难说,因为我们没有上下文。常见的选择有:

  • 在两个单独的绘图中绘制x/y和x/z。精确可读,但很难获得y和z之间的连接
  • Plotyy,与上一个相同,但在一个绘图中。对应于相同x值的Y和Z值对齐
  • 使用如上所示的plot3,但将每个点连接到x/z平面。(详情如下)
  • 将线投影到一个或多个平面上并在那里绘制。(再次绘制线,将x、y或z设置为70或180,这是轴的位置)
  • 如果两个轴非常重要,请使用简单的2d绘图,并使用颜色/点大小/注释等表示三维

  • 选项3的代码:

    在代码末尾,添加以下代码:

    X2=[X';X';nan(size(X'))];
    X2=X2(:);
    Y2=[Y';Y';nan(size(Y'))];
    Y2=Y2(:);
    Z2=[Z';zeros(size(Z'));nan(size(Z'))];
    Z2=Z2(:);
    
    hold on
    plot3(log(X2),Y2,Z2,'--')
    
    要理解它,您必须知道matlab在绘图时跳过了NaN。因此,上面的代码为每个点生成一个独立的线段,将其连接到地平面


    很难说,因为我们没有上下文。常见的选择有:

  • 在两个单独的绘图中绘制x/y和x/z。精确可读,但很难获得y和z之间的连接
  • Plotyy,与上一个相同,但在一个绘图中。对应于相同x值的Y和Z值对齐
  • 使用如上所示的plot3,但将每个点连接到x/z平面。(详情如下)
  • 将线投影到一个或多个平面上并在那里绘制。(再次绘制线,将x、y或z设置为70或180,这是轴的位置)
  • 如果两个轴非常重要,请使用简单的2d绘图,并使用颜色/点大小/注释等表示三维

  • 选项3的代码:

    在代码末尾,添加以下代码:

    X2=[X';X';nan(size(X'))];
    X2=X2(:);
    Y2=[Y';Y';nan(size(Y'))];
    Y2=Y2(:);
    Z2=[Z';zeros(size(Z'));nan(size(Z'))];
    Z2=Z2(:);
    
    hold on
    plot3(log(X2),Y2,Z2,'--')
    
    要理解它,您必须知道matlab在绘图时跳过了NaN。因此,上面的代码为每个点生成一个独立的线段,将其连接到地平面


    您好,根据您提供的信息,此处显示的绘图可能完全正确。如果你有三个向量大小n,X,Y,Z,这是一条三维直线,但我正在寻找是否有更好的方法来表示它。。我通常使用带有颜色条的surf来更好地理解Z@AnderBiguri:绘图是无用的,您无法从中读取任何值。您好,您提供的信息显示的绘图可能完全正确。如果你有三个向量大小n,X,Y,Z,这是一条三维直线,但我正在寻找是否有更好的方法来表示它。。我通常使用带有颜色条的surf来更好地理解Z@AnderBiguri当前位置这幅图没用,你无法从中读出任何值。如果我弄错了,请纠正我。您的意思是连接所有对应于X值和Z值之一的点。我试过图3(对数(X),Y,Z,'b.-');现在,我有一条带连接点的线。你是说这个还是别的?@卡门:不,我建议了其他的选择。你说的是哪一点?如果不清楚,我将添加一个示例。我用完整的代码更新了问题,因此根据数据更容易理解您的建议。@Carmen:我的建议中哪一个不清楚,但可能有趣?我不会提供所有五个的代码。谢谢,我对建议3感兴趣,我用上面的代码试过了。如果我错了,请纠正我。您的意思是连接所有对应于X值和Z值之一的点。我试过图3(对数(X),Y,Z,'b.-');现在,我有一条带连接点的线。你是说这个还是别的?@卡门:不,我建议了其他的选择。你说的是哪一点?如果不清楚,我将添加一个示例。我用完整的代码更新了问题,因此根据数据更容易理解您的建议。@Carmen:我的建议中哪一个不清楚,但可能有趣?我不会提供所有五个代码。谢谢,我对建议3感兴趣,我用上面的代码试过了。