在同一图中绘制单个3D点与曲面并保留指定轴范围的问题
解决在MATLAB中同图绘制3D曲面与单个点并保留轴范围的问题
我来帮你搞定这个问题!其实在MATLAB里实现这个需求很简单,核心就是用hold on保持绘图上下文,然后依次绘制曲面和点,最后锁定轴范围就行。结合你给出的代码片段,我整理了完整的解决方案:
核心思路
- 用
hold on确保所有绘图操作都在同一个3D坐标系里进行,不会每次绘图都新建窗口覆盖之前的内容 - 先绘制曲面(可以用
surf或mesh,按需选择),再绘制单个3D点(用plot3) - 最后用
axis()函数明确指定你需要的轴范围,完全保留你想要的区间
修改后的完整代码
%% 创建观测点网格 [obsX obsY] = meshgrid(0:1:50); % 生成观测点位置的X和Y数据 obsZ = zeros(size(obsX, 1)); % 生成观测点位置的Z数据(始终为obsZ = 0) obsPos = [obsX(:), obsY(:), obsZ(:)]; % 列出所有观测点位置 %% 定义单个3D点的位置(替换成你的实际坐标) singlePoint = [25, 25, 10]; % 示例:X=25,Y=25,Z=10的点,你可以改成自己的源点坐标 %% 绘制3D曲面与单个点 figure; % 创建新的绘图窗口 hold on; % 关键:保持当前坐标系,后续绘图都叠加在这里 % 绘制曲面(这里用surf,也可以换成mesh;FaceAlpha设置半透明避免挡住点) surf(obsX, obsY, obsZ, 'FaceAlpha', 0.5); xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴'); title('3D曲面与单个标记点'); % 绘制单个3D点:用红色实心圆标记,调大尺寸更显眼 plot3(singlePoint(1), singlePoint(2), singlePoint(3), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r'); % 设置你需要的轴范围(替换成你指定的数值即可) axis([0 50 0 50 0 20]); % 示例:X∈[0,50], Y∈[0,50], Z∈[0,20] grid on; % 显示网格,让3D结构更清晰 hold off; % 结束绘图保持
关键细节说明
- 如果你的曲面不是z=0的平面,只需要把
obsZ替换成你自己的曲面高度矩阵就行,surf函数会自动适配 FaceAlpha参数是可选的,设置半透明后,即使点在曲面后面也能看到,要是不需要可以删掉这个参数plot3的标记样式可以自定义:比如'bx'是蓝色叉号,'kp'是黑色五角星,按需调整axis()里的数值直接改成你需要保留的轴范围就行,完全不会被绘图内容自动修改
内容的提问来源于stack exchange,提问作者mldmnn
相关产品推荐
相关产品推荐

