在Matlab散点图中添加带有误差棒的数据点

3
我已经在matlab中执行了多维聚类分析。 对于每个聚类,我已经计算了均值和协方差(假设条件独立)。
我从原始数据中选择了两个或三个维度,并将其制成散点图或scatter3图。现在,我想将群集平均值和相应的标准差添加到同一图中。
换句话说,我想向散点图添加带有误差条的数据点。 这个问题几乎是我想要的。但是,如果使用条而不是框,则在这种情况下是否有内置的更少努力的方法可以实现呢?
有什么建议吗?
2个回答

2
一旦你意识到线段可能足以满足你的目的(并且根据点数可能比通常的带有须子的误差条更美观),你可以做一些相当简单的事情(适用于可能任何绘图包,而不仅仅是MATLAB)。
只需绘制一个散点图,然后编写一个循环以绘制所有你想要的对应于误差条的线段(或者按照相反的顺序进行,就像我首先绘制误差条,然后是散点图,具体取决于你是想要将点还是误差条放在顶部)。
这是简单的MATLAB代码,以及显示二维误差条的示例图(抱歉,由于近似线性而有些无聊): enter image description here 如你所见,你可以为每个轴绘制不同颜色的误差条以帮助可视化。
function scatterError(x, y, xe, ye, varargin)
%Brandon Barker 01/20/2014

nD = length(x);

%Make these defaults later:
dotColor = [1 0.3 0.3]; % conservative pink
yeColor = [0, 0.4, 0.8]; % bright navy blue
xeColor = [0.35, 0.35, 0.35]; % not-too-dark grey
dotSize = 23;

figure();
set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.
set(gca, 'FontSize', 23);
hold all;

for i = 1:nD
    plot([(x(i) - xe(i)) (x(i) + xe(i))], [y(i) y(i)], 'Color', xeColor);
    plot([x(i) x(i)], [(y(i) - ye(i)) (y(i) + ye(i))], 'Color', yeColor);
end

scatter(x, y, dotSize, repmat(dotColor, nD, 1));
set(gca, varargin{:});
axis square;

如果你真的想要在误差线上添加"whiskers",那么需要进行一些额外的工作,但并不是很难。


0

如果您对图形的外观不是太挑剔,并且正在寻找性能,那么内置函数确实经常是一个不错的选择。

我的第一个想法是尝试使用 箱线图,它有很多选项,因此可能其中一种组合会给您所需的结果。

附注:乍一看,您所提到的答案看起来并不是非常低效,因此在可实现的加速方面,您可能需要管理您的期望值。


抱歉没有说得具体一些。我不是在谈论执行速度,而是在谈论编程工作量。仅为获得一个错误框而定义一个函数对我来说有点过分了。 - Konstantin Schubert
@Konstantin 我可以想象你不想为每个功能添加一个函数,但是如果已经有人编写了它,复制它不需要太多的努力。 - Dennis Jaheruddin
重点是,我原本期望Matlab有一些内置的功能。那样会更容易,这就是问题所在。 - Konstantin Schubert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接