曲线之间的填充区域将线引回到曲线的起点

时间:2018-11-16 14:47:05

标签: matlab plot

我正在尝试为预先平滑的一些嘈杂曲线添加置信区间。我使用了this answer中提出的方法。就我而言,我是这样实现的:

tcd           % Cell array contains all the original data for multiple files
tcd_smooth    % Cell array contains the smoothed data for multiple files 

% Store all time-value pairs smaller than the original data in 
% lower_bound_times, lower_bound_values and all values larger than
% the original data in upper_bound_times, upper_bound_values
lower_bound_times = time{i_file}(tcd{i_file} < tcd_smooth{i_file});
upper_bound_times = time{i_file}(tcd{i_file} > tcd_smooth{i_file});
lower_bound_values = tcd{i_file}(tcd{i_file} < tcd_smooth{i_file});
upper_bound_values = tcd{i_file}(tcd{i_file} > tcd_smooth{i_file});

% Flip order of arrays to construct closed area that can be filled
X=[upper_bound_times; fliplr(lower_bound_times)];              
Y=[upper_bound_values; fliplr(lower_bound_values)];

fill(X, Y , 1,...
    'facecolor',colorOrder(mod(i_file-1,7)+1,:), ...
    'edgecolor',colorOrder(mod(i_file-1,7)+1,:), ...
    'facealpha', 0.2, ...
    'edgealpha', 0.2);

该代码段对索引为i_files的多个文件执行。置信水平很好地填充,如下面的单行放大图所示:

Zoomed in image of line with confidence interval

但是由于某些原因,所有行的末端都与开始处相连,如以下两个图所示:

Full plot

情节的右端看起来像这样:

Right end zoomed in

我无法解决如何摆脱这些返回的填充区域。

1 个答案:

答案 0 :(得分:2)

fliplr中使用水平翻转;和垂直连接与X=[upper_bound_times; fliplr(lower_bound_times)];似乎是错误的

如果upper_bound_times是列向量,则应使用上下翻转代替左右翻转:

X=[upper_bound_times; flipud(lower_bound_times)]; %flip along first dimension

如果它是行向量,则应该对,使用水平串联:

X=[upper_bound_times, fliplr(lower_bound_times)]; %horzcat