Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB线间填充区域_Matlab_Plot_Fill_Area - Fatal编程技术网

MATLAB线间填充区域

MATLAB线间填充区域,matlab,plot,fill,area,Matlab,Plot,Fill,Area,我正在尝试做一些类似于本文中概述的事情: 但是遇到了路障。我试图给代表平均+/-标准偏差的图形区域着色。变量定义有点复杂,但归结起来就是这段代码,当在没有着色的情况下绘制时,我得到以下屏幕截图: x = linspace(0, 100, 101)'; mean = torqueRnormMean(:,1); meanPlusSTD = torqueRnormMean(:,1) + torqueRnormStd(:,1); meanMinusSTD = torqueRnormMean(:,

我正在尝试做一些类似于本文中概述的事情: 但是遇到了路障。我试图给代表平均+/-标准偏差的图形区域着色。变量定义有点复杂,但归结起来就是这段代码,当在没有着色的情况下绘制时,我得到以下屏幕截图:

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--')

但是,当我试图通过添加下面的代码在图的下半部分(介于mean和meanMinusSTD之间)实现着色时,我得到的图如下所示:

fill( [x fliplr(x)],  [mean fliplr(meanMinusSTD)], 'y', 'LineStyle','--');

很明显,它没有对图形的正确区域进行着色,并且正在创建接近0的新的近水平线,这些线会干扰着色


有什么想法吗?我被难住了。

使用
mean
作为变量可能会遇到问题,因为它也是一个保留的MATLAB命令。尝试清除变量空间,然后使用唯一的变量名

至于第二个问题,你想

fill( [x fliplr(x)],  [meanUniqueName fliplr(meanMinusSTD)], 'y', 'LineStyle','--');
您也不需要分两步完成,但可以一次完成所有操作。我当前正在处理的脚本中的代码片段执行完全相同的操作,并包含以下行:

    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);

因此,我填充两条错误线之间的区域,然后在顶部绘制数据线。

您似乎做错了一件事,那就是将
fliplr
应用于列向量。那是没有效果的。您引用的示例使用行向量。您还可以将它们连接到矩阵中,而不是像示例中那样连接到单个向量中。我认为列向量的等价物是:

fill( [x;flipud(x)],  [mean;flipud(meanMinusSTD)], 'y');
另一种可能性:

x = 1:1000; % example x values
y_upper = 5+sin(2*pi/200*x); % example upper curve
y_lower = 2+sin(2*pi/230*x); % example lower curve
bar(x, y_upper, 1, 'b', 'edgecolor', 'b');
hold on
bar(x, y_lower, 1, 'w', 'edgecolor', 'w');
axis([0 1000 0 7])
它使用
(具有单位宽度和相同颜色的边)填充上部曲线,然后使用第二个
“删除”(以白色打印)下部


结果是一个列向量与行向量的问题。出于某种原因,将上述填充方法与原始列向量一起使用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')
请注意,我删除了虚线,只使用细线和粗线来表示标准偏差和平均值。我这样做是因为线条风格不一致。这个代码在一个循环中,DOF从1:9开始运行,在一些子图中,两条std曲线都是虚线,在一些子图中,只有顶部或底部。对我来说,把它们砸碎并不重要,所以我保持简单。这是我得到的图表的一个例子:


我刚刚尝试过(感谢您的关注,它确实有意义),但不幸的是,它对图形没有任何影响。线型添加有效(谢谢!),但即使在清除变量空间并将单词mean更改为meanVar后,我也得到了相同的结果。只需查看图形,看起来您正在填充
torqueRnormStd
torqueRnormMean torqueRnormStd
之间的区域。这不是你在这里写的,但这是你的图表的样子。也许您在代码中的某个地方转置了变量名?我检查了代码,非常确定没有转置变量名。我也知道这是另一个步骤,但我也有两个打印选项:一个用于着色,另一个用于打印数据集的所有各条线,但在这两种情况下,我都显示了平均、平均+SD和平均SD线,因此它们是先定义的。这非常聪明@谢谢<代码>填充可能更好。如果我把问题读得慢一点就好了……嗯,是的,
fill
更好但这样做更有趣!您好,我建议您发布完整的解决方案,并使您的答案成为公认的答案。这样,如果有相同问题的人看到你的帖子,他们可以很容易地找到正确的答案。好吧,上面说我需要等待2天才能将我自己的答案标记为已接受的答案,但同时我会发布完整的代码。