【问题标题】:Multi dimensional (2d better 3d) scatter-plot with different errorbars in matlabmatlab中具有不同误差线的多维(2d更好的3d)散点图
【发布时间】:2014-07-02 11:41:57
【问题描述】:

我正在尝试使用特定的误差线对散点图进行编程。我发现的唯一内置函数是

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 坐标或我想显示为误差条的特定标准推导。

【问题讨论】:

  • 我建议你比较一下FEX提交HERRORBARerrorbar里面的代码。 HERRORBAR 好像是直接从errorbar 改编而来的,如果你看一下变化,你可能会学习如何适应第三维度。
  • 打算这样做。对于我最好的情况,您知道如何为 3d 对象制作标记吗?
  • 如果您仔细查看 plot3d_errorbars,它会从 [x,y,z+e] 到 [x,y,z-e] 绘制一条线。您必须将其扩展到所有三个维度。
  • 您已经发布了一个链接,向您展示了如何做到这一点,您只需要调整该代码以使其也适用于其他两个方向。事实上,您发布的代码比errorbar 简单得多,我认为您应该尝试修改它,然后在遇到困难时发布在这里。
  • 我知道如何解决这个问题,但我不确定它是否可行,如果可行,我应该如何编程。在我的想法中,我不能绘制一个错误栏(x,y,e_y)然后将图形转换回数据点并更改坐标。这样我就可以绘制错误栏(y_new,x,ex)?为此,我必须知道 matlab 如何保存/计算 errorbar() 函数,以及是否可以将其更改回数据矩阵。我认为这可以与手柄一起使用。非常感谢任何提示、cmets、想法或它不应该起作用的原因。

标签: matlab 3d 2d scatter-plot


【解决方案1】:

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

【讨论】:

  • 是的,你的改编工作得很好。非常感谢,它比我的好得多。我只是复制了 for 循环 2 次并旋转了变量。也得到相同的结果,但有更多的行和循环。所以非常感谢。我不知道权利,但也许你应该在你的代码中引用链接或“程序员”,这样复制你的代码的其他人就不会遇到问题。
  • @TheMinion 添加了链接
  • 我不是在谈论指向代码的链接,这已经在我的问题中完成,而是关于版权。不知道,因为我从 mathworks 找到了有关文件共享的代码,但如果有人看到这个论坛复制它,而不是指您刚刚为 3D 改编的“真实”作者。他可能会遇到问题。
  • @TheMinion 我认为链接很好
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2018-09-29
  • 2012-10-13
  • 2018-03-11
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多