我在matlab中进行了多维聚类分析。对于每个集群,我计算了均值和协方差(假设条件独立)。
我从原始数据中选择了两个或三个维度并将其绘制成散点图或 scatter3 图。现在我想将集群均值和相应的标准偏差添加到同一个图中。
换句话说,我想将一些带有误差线的数据点添加到散点图中。
这个问题几乎是我想要的。但是我可以用条而不是盒子,我想知道在这种情况下是否有一种内置的方法可以更轻松地做到这一点。
关于如何做到这一点的任何建议?
一旦您意识到线段可能足以满足您的目的(并且可能不如通常的带有胡须的误差线那么难看,具体取决于点数),您可以做一些非常简单的事情(这可能适用于任何绘图包,不仅仅是 MATLAB)。
只需绘制一个散点图,然后编写一个循环来绘制您想要对应于误差线的所有线段(或者按照我对误差线所做的相反顺序进行绘制,然后是散点图,具体取决于您想要点还是错误顶部的酒吧)。
这是简单的 MATLAB 代码,以及显示二维误差线的示例图(对于无聊的近线性感到抱歉):
如您所见,您可以为每个轴绘制不同颜色的误差线以帮助可视化。
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;
通过一些额外的工作,如果你真的想要它们,在你的错误栏中添加胡须不会太难。
如果您对图形的外观不太挑剔并且正在寻找性能,那么内置函数确实通常是一个不错的选择。
我的第一个想法是尝试使用boxplot,它有很多选项,所以它们的一个组合可能会给你你需要的结果。
旁注:乍一看,您提到的答案看起来效率并不低,因此在可实现的加速方面,您可能必须管理您的期望。