簡體   English   中英

在 MATLAB 中繪制彩色 3D 圖形

[英]Plotting a coloured 3D figure in MATLAB

我有 3 個軸:大小為 N 的X 、大小為 M 的Y和大小為 O 的Z ,它們對應於我的數據的坐標。

我有一個矩陣:大小為 MxNxO 的DATA ,它對應於每個點的模塊。

我想 plot 坐標XYZ的 MATLAB 圖形,並根據大小為 MxNxO 的矩陣DATA的值對點進行着色。

我嘗試了很多功能,例如scatter3surfplot3 ,但沒有一個按我的意願工作。

這是我嘗試過的:

n = 10;
x = linspace(0,10,n);
y = linspace(0,10,n);
z = linspace(0,10,n);

DATA = randn(n,n,n);

scatter3(x,y,z,DATA);

此代碼不起作用,因為DATA的大小與xyz不同。 我也嘗試過:

[X,Y,Z] = ndgrid(x,y,z) 
scatter3(X,Y,Z,DATA);

但這也不起作用。

scatter3()的技巧是將矩陣“展開”為列向量,並且不要忘記第四個參數是大小,而不是顏色:

n = 10;
x = linspace(0,10,n);
y = linspace(0,10,n);
z = linspace(0,10,n);
[X,Y,Z] = ndgrid(x,y,z);
DATA = randn(n,n,n);

% here 3 is the size. You can set it to a different constant, or vary it as well
scatter3(X(:), Y(:), Z(:), 3, DATA(:));

結果是

在此處輸入圖像描述

您可以為表面着色,查看其文檔,但是,鑒於您擁有完整的數據點立方體,這在您的情況下似乎沒有多大意義。 表面是二維的,而您的數據是 3D。 對於 2D 表面,只需按照文檔中的示例進行操作:

n = 10;
x = linspace(0,10,n);
y = linspace(0,10,n);

Z = rand(n);
DATA = randn(n);

surf(x, y, Z, DATA);

在此處輸入圖像描述

在 R2007b 中呈現的圖像,語法與文檔交叉檢查。

如果您的曲面由包含 X、Y、Z 和數據的 M × 4 數組定義,則可以使用delaunay()創建點的 Delaunay 三角剖分,然后trisurf()到 plot 。 請注意,這仍然需要一個 2D 表面,盡管它可以在三個維度上變化。 即使使用這種方法,您示例中的數據立方體對於 plot 作為表面仍然沒有意義。

暫無
暫無

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

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