[英]Plotting a coloured 3D figure in MATLAB
我有 3 個軸:大小為 N 的X
、大小為 M 的Y
和大小為 O 的Z
,它們對應於我的數據的坐標。
我有一個矩陣:大小為 MxNxO 的DATA
,它對應於每個點的模塊。
我想 plot 坐標X
、 Y
、 Z
的 MATLAB 圖形,並根據大小為 MxNxO 的矩陣DATA
的值對點進行着色。
我嘗試了很多功能,例如scatter3
、 surf
、 plot3
,但沒有一個按我的意願工作。
這是我嘗試過的:
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
的大小與x
、 y
、 z
不同。 我也嘗試過:
[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.