Matlab 2015b中std为0时误差填充绘图异常问题问询
解决Matlab中标准误差为0时fill绘图异常的问题
我碰到过类似的Matlab旧版本绘图问题,其实根源在于当标准误差全为0时,你用fill构造的是一个退化的多边形——也就是两条完全重合的线(y-std和y+std都等于y),Matlab 2015b对这种“没有面积”的多边形渲染逻辑有问题,所以会显示异常。
下面给你两种实用的解决方案:
方案1:提前判断,跳过无意义的填充
既然标准误差为0时填充区域和曲线完全重合,那直接不画填充就好了,只保留曲线。代码修改如下:
x = Data(:,1); y = Data(:,2); std_err = 0*y; % 你的标准误差计算 % 先绘制主曲线 line(x, y); % 只有当标准误差不全为0时,才绘制填充阴影 if ~all(std_err == 0) fill([x; flipud(x)], [y-std_err; flipud(y+std_err)], [.2 .9 .9], 'linestyle', 'none'); alpha(0.1); end
这个方法最合理,既避免了异常,又节省了不必要的绘图计算。
方案2:给标准误差加极小值,避免退化多边形
如果你一定要保留fill的调用(比如统一绘图逻辑),可以给标准误差加一个极小的非零值(比如1e-10),让多边形有微小的高度,Matlab就能正常渲染了,视觉上完全看不出区别:
x = Data(:,1); y = Data(:,2); std_err = 0*y; % 给所有标准误差加极小值,避免全为0 std_err = std_err + 1e-10; fill([x; flipud(x)], [y-std_err; flipud(y+std_err)], [.2 .9 .9], 'linestyle', 'none'); line(x, y); alpha(0.1);
这两种方法都能解决Matlab 2015b里的这个异常问题,你可以根据自己的需求选一种~
内容的提问来源于stack exchange,提问作者user6110593
相关产品推荐
相关产品推荐

