Matlab环境下stem3柱状图按误差高度着色及曲面图生成技术问询
解决方案:MATLAB 3D柱体着色与误差曲面图生成
嘿,我来帮你搞定这两个MATLAB绘图的需求,直接上实用的解决方案和代码:
1. 为stem3柱体根据误差高度着色
默认的stem3只会用单一颜色绘制柱体,要实现按误差err的高度着色,我们可以通过获取绘图句柄,给每个柱体的线段单独设置颜色,再配合颜色条直观展示误差与颜色的对应关系。
修改后的代码:
x_pred = (Net_Out(1,:))'; y_pred = (Net_Out(2,:))'; x_true = correct_output(:,1); y_true = correct_output(:,2); err = sqrt((x_pred - x_true).^2 + (y_pred - y_true).^2); % 绘制stem3并获取句柄 h = stem3(x_true, y_true, err,'Marker','none', 'LineWidth', 2); % 将误差值归一化到[0,1],适配颜色映射范围 err_normalized = (err - min(err)) / (max(err) - min(err)); % 为每个柱体线段设置对应颜色 for i = 1:length(h.XData) % 这里用jet色图,你可以换成viridis、parula等其他色图 h(i).Color = colormap(jet(err_normalized(i))); end % 添加辅助元素,提升可读性 colorbar; xlabel('真实X值'); ylabel('真实Y值'); zlabel('欧氏误差'); title('按误差高度着色的3D柱形图');
2. 基于真实值与误差生成曲面图
完全可以生成曲面图!不过要注意:曲面图需要网格化的二维数据,而你的x_true、y_true大概率是散点数据,所以需要先通过插值将散点误差转换为网格化的误差数据,再绘制曲面。
实现代码:
% 沿用之前计算得到的err、x_true、y_true数据 % 生成X-Y平面的网格化坐标(这里设置50x50的网格,可根据需求调整) [X_grid, Y_grid] = meshgrid(linspace(min(x_true), max(x_true), 50), ... linspace(min(y_true), max(y_true), 50)); % 用三次插值将散点误差映射到网格上(三次插值的曲面更平滑) Z_grid = griddata(x_true, y_true, err, X_grid, Y_grid, 'cubic'); % 绘制曲面图 figure; surf(X_grid, Y_grid, Z_grid, 'EdgeColor', 'none'); colormap(viridis); % 推荐的色图,对色盲友好 colorbar; xlabel('真实X值'); ylabel('真实Y值'); zlabel('欧氏误差'); title('真实坐标与预测误差的曲面分布图'); shading interp; % 开启平滑着色,让曲面过渡更自然
图像描述:
这张曲面图直观呈现了真实X-Y坐标平面上的预测误差分布:
- 曲面的高度直接对应预测值与真实值之间的欧氏误差,高度越高代表该区域的预测偏差越大
- 颜色渐变与误差高度同步,冷色调(如深蓝)对应小误差区域,暖色调(如亮黄)对应大误差区域
- 平滑插值后的曲面清晰展示了误差在X-Y平面上的变化趋势,能快速定位预测效果好/差的坐标区域,帮助分析模型的性能短板
内容的提问来源于stack exchange,提问作者Jaspreet Kaur
相关产品推荐
相关产品推荐

