簡體   English   中英

來自scatter3數據的matlab 3d曲面圖

[英]matlab 3d surface plot from scatter3 data

我想在同一個圖上繪制一個帶有曲面圖的三維散點圖,這樣我最終會得到這樣的結果:

在此輸入圖像描述

我原以為下面的代碼可能達到了我想要的但顯然沒有。 我有xyz數據來繪制scatter3

x = [1 1 1 1 0.95 0.95 0.95 0.95 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 0.75 0.75]';
y = [0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1]';
z = [0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3]';

scatter3(x,y,z)
hold on

現在添加一個表面?

p = [x y z];
surf(p)

有任何想法嗎? 謝謝。

問題是沖浪將矩陣p視為z值的二維數組,x和y的整數值。 幸運的是,surf有多種輸入值的方法(參見http://au.mathworks.com/help/matlab/ref/surf.html )。

嘗試這個:

x = [1 1 1 1 0.95 0.95 0.95 0.95 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 0.75 0.75]';
y = [0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1]';
z = [0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3]';

xr = reshape(x, 4, 5);
yr = reshape(y, 4, 5);
zr = reshape(z, 4, 5);

surf(xr, yr, zr)

xlabel('x')
ylabel('y')
zlabel('z')

在這種情況下,surf需要一個x,y和z值的二維數組(如果從上到下看它們就會出現)。 這樣,surf就知道要連接到表面的頂點。 幸運的是,只需將矢量重新整形為矩陣,就可以輕松實現這一點。

將來,如果你的所有點位於相同的x和y坐標上,你可以用[1,0,0.95,0.85,0.8,0.75]替換xr,用[0.3,0.2,0.15,0.1]替換yr,沖浪會將它們轉換為數組給你。

我不得不處理同樣的問題; 我認為回答這個問題可能仍然有用

您需要創建兼容的z軸/矩陣。 我寫了scatt2surf來將散布數據轉換為曲面。 我希望它有所幫助。

clear all;clc

xx = [1 1 1 1 0.95 0.95 0.95 0.95 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 0.75 0.75];
yy= [0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1];
zz= [0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3];


[x1,y1,z_surf]=scatt2surf(xx,yy,zz);
figure(3)
surf(x1,y1,z_surf);
xlabel('\it X');ylabel('\it Y');zlabel('\it Z');
colormap(hot)

hold on
scatter3(xx,yy,zz,[],zz,'o','filled','MarkerEdgeColor','none');
grid on;


function [x1,y1,z_surf]=scatt2surf(xx,yy,zz)   
    x1= unique(round(xx,7));
    y1=unique(round(yy,7));
    z_surf=ones(length(x1),length(y1));
    for i=1:length(x1)
        for j=1:length(y1) 
        indx=[xx==x1(i) & yy==y1(j)];
        z_surf(i,j)=zz(indx);   
        end
    end
    z_surf=z_surf';
end

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM