在matlab中具有不同误差条的多维(2d更好的3d)散点图

时间:2014-05-14 12:07:20

标签: matlab 3d 2d scatter-plot

我正在尝试使用特定的错误栏对scatterplot进行编程。我找到的唯一功能构建是

errorbar()

但这只能让我在y方向上制作带有错误栏的2D图。我要求的是一种用x和y方向的误差线绘制它的方法。

最后,我的目标是制作一个包含3个错误栏的3D散点图。
如果得到的图像是具有3d几何形状(坐标x,y,z,其尺寸与误差范围成比例的扩展)的3d图形为“标记”,那将是完美的。

我在搜索互联网时找到了这个页面:http://code.izzid.com/2007/08/19/How-to-make-a-3D-plot-with-errorbars-in-matlab.html 但不幸的是,他们只使用一个错误栏。

我的数据是由6个数组组成的,每个数组包含x,y或z坐标或我想要显示为错误栏的特定标准派生。

1 个答案:

答案 0 :(得分:2)

code you posted看起来非常容易适应绘制所有三个误差线。试试这个(请注意,我也对它进行了调整,以便您可以像平常一样使用varargin更改绘图的形状和颜色等,例如,您可以调用plot3d_errorbars(...., '.r')

function [h]=plot3d_errorbars(x, y, z, ex, ey, ez, varargin)

% create the standard 3d scatterplot
hold off;
h=plot3(x, y, z, varargin{:});

% looks better with large points
set(h, 'MarkerSize', 25);
hold on

% now draw the vertical errorbar for each point
for i=1:length(x)
        xV = [x(i); x(i)];
        yV = [y(i); y(i)];
        zV = [z(i); z(i)];

        xMin = x(i) + ex(i);
        xMax = x(i) - ex(i);
        yMin = y(i) + ey(i);
        yMax = y(i) - ey(i);
        zMin = z(i) + ez(i);
        zMax = z(i) - ez(i);

        xB = [xMin, xMax];
        yB = [yMin, yMax];
        zB = [zMin, zMax];

        % draw error bars
        h=plot3(xV, yV, zB, '-k');
        set(h, 'LineWidth', 2);
        h=plot3(xB, yV, zV, '-k');
        set(h, 'LineWidth', 2);
        h=plot3(xV, yB, zV, '-k');
        set(h, 'LineWidth', 2);
end

使用示例:

x = [1, 2];
y = [1, 2];
z = [1, 2];
ex = [0.1, 0.1];
ey = [0.1, 0.5];
ez = [0.1, 0.3];

plot3d_errorbars(x, y, z, ex, ey, ez, 'or')