Matlab中使用waterfall/mesh函数绘制不同z维度3D曲线的问题求助
解决Waterfall函数绘制独立Z维度曲线的问题
我来帮你搞定这个3D绘图的问题!咱们先拆解下你代码里的核心问题:waterfall函数需要网格格式的输入数据,但你目前的x、y、z结构完全不符合它的参数要求,这才导致无法正常运行。下面给你一步步修正,同时也补上mesh函数的正确用法。
修正后的Waterfall代码
直接上能跑的代码,我会顺便解释关键调整点:
x = 0:.1:1; % 先单独生成两条y曲线,方便后续处理 y1 = exp(x); y2 = exp(2*x); % 生成网格数据:把x扩展成和y匹配的维度,同时固定z的两个值[1,2] [X,Z] = meshgrid(x, [1,2]); % 把两条y曲线组合成和X/Z同维度的Y矩阵 Y = [y1; y2]; % 现在参数格式完全符合要求,直接调用waterfall waterfall(X, Y, Z); xlabel('X'); ylabel('Y'); zlabel('Z');
关键逻辑:
meshgrid(x, [1,2])会生成一个2行11列的X矩阵(和你的x长度一致),以及对应的Z矩阵——第一行全是1,第二行全是2,这样就把两条曲线分别“钉”在了z=1和z=2的平面上。- Y矩阵按行排列两条y值曲线,和X、Z的网格维度严格匹配,
waterfall就能正确识别每条曲线对应的z位置了。
用Mesh函数实现的方法
如果你想用mesh函数达到类似效果,同样需要先构建网格数据,示例代码如下:
x = 0:.1:1; z_vals = [1,2]; [X,Z] = meshgrid(x, z_vals); % 先创建和X/Z同维度的空Y矩阵 Y = zeros(size(X)); % 给每行分别赋值对应的曲线值 Y(1,:) = exp(X(1,:)); Y(2,:) = exp(2*X(2,:)); % 绘制mesh图 mesh(X, Y, Z); xlabel('X'); ylabel('Y'); zlabel('Z'); grid on;
额外小技巧:用plot3更直接画独立曲线
如果你的需求只是展示两条独立的3D曲线,其实用plot3会更简单,不需要构建网格:
x = 0:.1:1; plot3(x, exp(x), ones(size(x)), 'LineWidth',2); hold on; plot3(x, exp(2*x), 2*ones(size(x)), 'LineWidth',2); xlabel('X'); ylabel('Y'); zlabel('Z'); hold off;
这个方法直接给每条曲线指定固定的z值,适合只需要绘制少量曲线的场景。
内容的提问来源于stack exchange,提问作者Sanjo
相关产品推荐
相关产品推荐

