在Matlab中绘制误差线

时间:2017-05-05 12:57:29

标签: matlab plot matlab-figure scatter-plot

我在MATLAB中创建了一个带有五个点的示例散点图,如下所示:

x = linspace(0,pi,5);
y = cos(x);
scatter(x,y);

在我的情况下,每个点的y值应在如下定义的预定义范围内:

y_limits = {[0.9 1.1], [0.6 0.8], [-0.1 0.1], [-0.8 -0.6], [-1.1 -0.9]};

例如,y1的{​​{1}}值应在x = 0范围内。

我想以某种方式在同一个情节中很好地通过

绘制五个垂直边界
  • 五条垂直线,端点分别位于两个极限
  • 两个限制之间的五个填充垂直区域
  • 可能更合适的其他内容

我想在这种图形表示中获得一些比我更有经验的人的建议或示例代码。

2 个答案:

答案 0 :(得分:2)

您可以使用errorbar function

在一行中执行此操作
% Your example variables
x = linspace(0,pi,5)';
y = cos(x);
y_limits = [0.9, 1.1; 0.6, 0.8; -0.1, 0.1; -0.8, -0.6; -1.1, -0.9];

% Plot
errorbar(x, y, y - y_limits(:,1), y_limits(:,2) - y, 'x');
% Format: (x, y, negative error, positive error, point style)

结果:

error bars

编辑,您可以在调用errorbar时设置图表的线条属性。例如,您可以使用较大的蓝色圆圈标记和较粗的红色误差条 使用:

errorbar(x, y, y - y_limits(:,1), y_limits(:,2) - y, 'o', 'MarkerSize', 2, 'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'b', 'Color', 'r', 'LineWidth', 1);

注意这些图片我正在使用grid on添加网格。第二个结果:

result 2

答案 1 :(得分:1)

使用line命令创建行。

for i = 1:length(x)
line([x(i) x(i)], [y_limits{i}]);
end

可以使用patchfill完成填充区域。对限制进行一些重新排序是必要的,以便给出的顺序遵循要填充的区域周围的路径。一个很好的技巧是在这些填充区域上使用alpha命令来创建透明度。

hold on    
y_corners = reshape([y_limits{:}], 2, length(x)).'; %make an array
y_corners = [y_corners(:,1); flipud(y_corners(:,2))]; %corners follow a path around the shape
fill([x fliplr(x)], y_corners, 'blue');
alpha(0.5);