【问题标题】:Configuring biplot in Matlab to distinguish in scatter在 Matlab 中配置 biplot 以区分散点图
【发布时间】:2013-09-27 13:41:38
【问题描述】:

我原来的data 是一个195x22 记录集,其中包含帕金森病患者的声音测量值。在一个向量中,195x1,我有一个 status,它是 1/0。

现在,我执行了 PCA 并执行了 biplot,结果很好。问题是我无法从我的散点图中分辨出病人或健康人的哪些点(我无法将其与status 联系起来)。我希望我的散点图在健康 (status=0) 时有一个红点,在生病时 (status=1) 有一个绿色点。

我该怎么做?我的双标代码是:

biplot(coeff(:,1:2), ...
    'Scores', score(:,1:2), ...
    'VarLabels', Labels, ...
    'markersize', 15 ...
);
xlabel('Bi-Plot: Standardized Data');
xlabel('PCA1');
ylabel('PCA2');

Click to view image

更新(解决方案):

解决方案的灵感来自@Magla,代码可以在这里看到:http://pastebin.com/KHUj3DnA

有了这张漂亮的图表:

【问题讨论】:

  • 变量coeffscore是什么?能否提供自包含的代码供我们试用?

标签: matlab plot pca


【解决方案1】:

biplot 中的主成分分数(红点)不是 pca 函数返回的分数。正如帮助所述,

biplot 缩放分数以使其适合绘图:它将每个分数除以所有分数的最大绝对值,然后相乘 由 coefs 的最大系数长度。然后 biplot 改变 根据符号约定的分数坐标符号 系数。

因此,您不能轻易使用(X,Y) 信息来找出哪个点属于某个类别。

这是使用biplotObsLabels 选项的解决方法。 ObsLabels 为每个观察分配一些用户定义的数据:对于每个点,我们将分配与 status 变量对应的索引(一个简单的递增值)。有了这个,您可以轻松地修改 biplot 的红点 - 这里将 marker 设置为正方形和红/绿颜色。

下图

由这段代码产生

%some data
load carsmall
x = [Acceleration Displacement Horsepower MPG Weight]; x = x(all(~isnan(x),2),:);
[coefs,score] = pca(zscore(x));

%the status vector (here zero or one)
class_pt = round(rand(size(score,1),1));

vbls = {'Accel','Disp','HP','MPG','Wgt'};

figure('Color', 'w');
hbi = biplot(coefs(:,1:2),'scores',score(:,1:2),'varlabels',vbls,...
    'ObsLabels',num2str((1:size(score,1))'));

for ii = 1:length(hbi)
    userdata = get(hbi(ii), 'UserData');
    if ~isempty(userdata)
        if class_pt(userdata) == 0
            set(hbi(ii), 'Color', 'g', 'Marker', 's');

        elseif class_pt(userdata) == 1
            set(hbi(ii), 'Color', 'r', 'Marker', 's');
        end

    end
end

【讨论】:

  • 为什么向量也是彩色的?那也是代码的一部分吗?如果是在哪里?我只想给线条上色。
  • @kamula 每个点都与一个设置为none-LineStyle 属性相关联。设置点的颜色也会设置线的颜色。在代码执行结束时检查get(hbi(ii))get(hbi(ii-1))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2013-08-17
  • 1970-01-01
  • 2021-06-14
  • 2013-02-12
  • 2013-12-17
相关资源
最近更新 更多