如何为Matlab拟合曲面图的最值点添加Data Tips
MATLAB拟合曲面添加Data Tips解决方法
问题原因
datatip函数不能直接作用于fit拟合对象,它需要接收图形对象句柄(比如surf/plot生成的surface或line对象)作为第一个参数,直接传入fit对象会触发"Invalid argument..."错误。
解决步骤与代码示例
方法1:基于原始数据最值点添加
直接获取plot函数返回的图形对象句柄,再给原始数据的最值点添加Data Tip:
defDM_fit = fit([def_X, def_Y],def_Z,'cubicinterp'); clf; figure(2) % 绘制拟合曲面并获取图形对象句柄 h = plot(defDM_fit,[def_X, def_Y],def_Z); % 找到原始数据中Z的最大值点(最小值同理用min) [max_Z, idx] = max(def_Z); max_X = def_X(idx); max_Y = def_Y(idx); % 给最值点插入Data Tip datatip(h, max_X, max_Y, max_Z);
方法2:基于拟合曲面全局最值点添加
如果需要找拟合曲面上的全局最值,先生成拟合曲面的网格数据,再定位最值坐标:
defDM_fit = fit([def_X, def_Y],def_Z,'cubicinterp'); clf; figure(2) % 生成拟合曲面的网格数据 [X_grid,Y_grid] = meshgrid(linspace(min(def_X),max(def_X),100),linspace(min(def_Y),max(def_Y),100)); Z_grid = feval(defDM_fit,X_grid,Y_grid); % 定位拟合曲面的最大值点 [max_Z_grid, linear_idx] = max(Z_grid(:)); [max_row, max_col] = ind2sub(size(Z_grid), linear_idx); max_X_fit = X_grid(max_row, max_col); max_Y_fit = Y_grid(max_row, max_col); % 绘制拟合曲面并添加Data Tip h = surf(X_grid,Y_grid,Z_grid); datatip(h, max_X_fit, max_Y_fit, max_Z_grid); % 可选:叠加原始数据点便于对比 hold on; plot3(def_X,def_Y,def_Z,'ro','MarkerSize',5); hold off;
关键说明
- 必须确保
datatip的第一个参数是图形对象句柄,而非fit模型对象; - 若需要添加多个Data Tip,重复调用
datatip即可,每次传入对应坐标。
内容的提问来源于stack exchange,提问作者JFS
相关产品推荐
相关产品推荐

