You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:08:14