matlab - 显示多个数据时更好的错误栏

标签 matlab plot matlab-figure matlab-hg2

所以我需要绘制一些 errobar图中的情节。具体来说,我需要在每个图中绘制 4 个 errorbar 图,问题是当绘制多个数据时,图变得有点不可读。

例子:

clear all
close all
clc



x = 0:pi/10:pi;
y = sin(x);
y2=cos(x);
y3=atan(x);
e = std(y)*ones(size(x));
e2 = std(y2)*ones(size(x));
e3 = std(y3)*ones(size(x));

figure
hold on
errorbar(x,y,e)
errorbar(x,y2,e2)
errorbar(x,y3,e3)

enter image description here

我解决这个问题的想法是用相同的绘图颜色和低 alpha 填充误差线角划定的区域,这样区域的重叠就可见了。

问题是,我能想到的唯一方法是在由误差条角分隔的区域中创建一个网格,然后用 patch 填充它们。 .这确实是可能的,但很烦人,因为绘图不会有凸包,因此我需要迭代地一个一个地创建三角形。所以问题是:是否有更优雅的方法来做到这一点?

此外,如果有人有更好的可视化此数据的方法,我愿意接受建议。

最佳答案

方法一

正常绘制图形,然后使用补丁手动绘制误差线。补丁的数据(坐标和颜色)取自绘制的图表,补丁的 alpha 可以设置为任何所需的值。

clear all
close all
clc

error_alpha = .4;
error_width_factor = .01;

x = 0:pi/10:pi;
y = sin(x);
y2 = cos(x);
y3 = atan(x);
e = std(y)*ones(size(x));
e2 = std(y2)*ones(size(x));
e3 = std(y3)*ones(size(x));
ee = [e; e2; e3];

figure
hold on
hp(1) = plot(x,y);
hp(2) = plot(x,y2);
hp(3) = plot(x,y3);

w = diff(xlim)*error_width_factor;
for m = 1:numel(hp)
    for n = 1:numel(hp(m).XData)
        patch(hp(m).XData(n)+[-1 1 1 -1]*w, hp(m).YData(n)+[-1 -1 1 1]*ee(m,n), 'w',...
           'FaceColor', hp(m).Color, 'FaceAlpha', error_alpha, 'EdgeColor', 'none');
    end
end

enter image description here

方法二

与以前类似,但使用更窄的补丁并使用图形相关的水平偏移绘制它们(如@Patrik 所建议)。应用 alpha 值有助于使图形更轻。

该代码是方法 1 的修改版本。此处显示的示例包含 101 个数据值,并且仍然相当明显。

clear all
close all
clc

error_alpha = .4;
error_width_factor = .003;

x = 0:pi/50:pi;
y = sin(x);
y2 = cos(x);
y3 = atan(x);
e = std(y)*ones(size(x));
e2 = std(y2)*ones(size(x));
e3 = std(y3)*ones(size(x));
ee = [e; e2; e3];

figure
hold on
hp(1) = plot(x,y);
hp(2) = plot(x,y2);
hp(3) = plot(x,y3);

w = diff(xlim)*error_width_factor;
m0 = (numel(hp)+1)/2;
for m = 1:numel(hp)
    for n = 1:numel(hp(m).XData)
        patch(hp(m).XData(n)+[-1 1 1 -1]*w+w*(m-m0),...
        hp(m).YData(n)+[-1 -1 1 1]*ee(m,n), 'w', 'FaceColor', hp(m).Color, ...
        'FaceAlpha', error_alpha, 'EdgeColor', 'none');
    end
end

enter image description here

关于matlab - 显示多个数据时更好的错误栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28558759/

相关文章:

python - matplotlib从左到右到下显示图像(matlab蒙太奇)

c++ - Regionprops 与 findContours

python - 绘制路径线,给定速度矢量场的条纹线

matlab - 将条形图绘制为表中 for 循环中的子图,以便它在每次迭代时更新行元素

matlab - 使用 matlab 进行 EEG 原始数据波段滤波

matlab - 乳液在滚筒之间 split

R:以另一种颜色在一个ECDF上绘制一个ECDF

python - 绘制简单图形的最简单的 python 代码是什么(比 matlab 更简单)

matlab - Matlab 图中的希腊字母

matlab - 在 matlab 中使用 plot3 时如何保存绘图?