dus*_*ots 2 matlab plot area fill
我正在尝试做类似于这篇文章中概述的内容: MATLAB,填充两组数据之间的区域,一个图中的线条 但遇到了障碍.我试图遮蔽图表中表示平均值+/-标准差的区域.变量定义有点复杂,但归结为此代码,并且在没有着色的情况下绘制时,我得到以下截图:
x = linspace(0, 100, 101)';
mean = torqueRnormMean(:,1);
meanPlusSTD = torqueRnormMean(:,1) + torqueRnormStd(:,1);
meanMinusSTD = torqueRnormMean(:,1) - torqueRnormStd(:,1);
plot(x, mean, 'k', 'LineWidth', 2)
plot(x, meanPlusSTD, 'k--')
plot(x, meanMinusSTD, 'k--')
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过添加下面的代码在图的下半部分(在mean和meanMinusSTD之间)实现着色时,我得到一个如下图:
fill( [x fliplr(x)], [mean fliplr(meanMinusSTD)], 'y', 'LineStyle','--');
Run Code Online (Sandbox Code Playgroud)

显然没有遮挡图形的正确区域,并且正在创建接近0的新近水平线,这些线条正在弄乱阴影.
有什么想法吗?我很难过.
使用mean变量可能会遇到问题,因为它也是一个保留的MATLAB命令.尝试清除变量空间,然后使用唯一的变量名称.
至于第二个问题,你想要
fill( [x fliplr(x)], [meanUniqueName fliplr(meanMinusSTD)], 'y', 'LineStyle','--');
Run Code Online (Sandbox Code Playgroud)
您也不需要分两步完成此操作,但可以一次完成所有操作.我正在处理的脚本中的代码片段执行完全相同的操作并包含以下行:
avar = allan(DATA, tau);
xFill = [avar.tau1 fliplr(avar.tau1)];
yFill = [avar.sig2+avar.sig2err fliplr(avar.sig2-avar.sig2err)];
figure(2);
fill(xFill,yFill,'y','LineStyle','--')
line(avar.tau1,avar.sig2);
Run Code Online (Sandbox Code Playgroud)
所以我填充两条错误线之间的区域,然后在顶部绘制数据线.
原来是列与行向量的问题。出于某种原因,将上面的fill方法与带有原始列向量的flipud一起使用是行不通的,但是先转换原始变量再使用fliplr可以。去搞清楚。如果有帮助,请参考以下代码:
x = linspace(0,100, 101);
mean = torqueRnormMean(:,DOF)';
meanPlusSTD = torqueRnormMean(:,DOF)' + torqueRnormStd(:,DOF)';
meanMinusSTD = torqueRnormMean(:,DOF)' - torqueRnormStd(:,DOF)';
fill( [x fliplr(x)], [meanPlusSTD fliplr(meanMinusSTD)], 'k');
alpha(.25);
plot(x, mean, 'k', 'LineWidth', 2)
plot(x, meanPlusSTD, 'k')
plot(x, meanMinusSTD, 'k')
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了虚线,只是使用细线与粗线来表示标准差和均值。我这样做是因为线条样式不一致。这段代码处于一个循环中,其中DOF从1:9开始运行,在某些子图中,两个标准曲线都将变为虚线,而在某些曲线中则仅位于顶部或底部。对我来说,让它们破折号并不重要,所以我保持简单。现在,这是我得到的图形的示例:
