我有三个不同的表面,我想在一个图中显示所有表面。
问题是,我有一个用z定义的表面(意味着我得到了x和y值以及一个指定每个组合的z值的网格)和另外两个用x定义的表面。这意味着对于一个x,y对存在各种z值。
我的想法是:
figure
surf(x,y,zgrid)
hold on
surf(x,ygrid,z)
surf(x,ygrid2,z)
hold off
我希望MATLAB能够自己管理它,但事实并非如此。 您对如何获得想要的结果有任何想法吗?我想在一个图中显示所有这些以显示横截面。
这是一个如何或多或少应该是这样的图像:
如果有更漂亮的方法可以显示,请告诉我。
答案 0 :(得分:3)
你没有说明到底出了什么问题,但是当你试图绘制你的第二个表面时,我会冒一个有根据的猜测你会得到如下错误:
Error using surf (line 82)
Z must be a matrix, not a scalar or vector.
我猜你的x
,y
和z
变量是向量,而不是矩阵。 surf
函数允许X
和Y
输入为向量,然后使用meshgrid
将其扩展为矩阵。但不为Z
输入执行此操作。
在我看来,最好的做法是只使用矩阵来输入所有输入。以下是我执行此操作的示例(使用meshgrid
)绘制多维数据集的三个曲面:
% Top surface (in z plane):
[x, y] = meshgrid(1:10, 1:10);
surf(x, y, 10.*ones(10), 'FaceColor', 'r');
hold on;
% Front surface (in y plane):
[x, z] = meshgrid(1:10, 1:10);
surf(x, ones(10), z, 'FaceColor', 'b');
% Side surface (in x plane):
[y, z] = meshgrid(1:10, 1:10);
surf(ones(10), y, z, 'FaceColor', 'g');
axis equal
这是情节: