带有彩条的PCA

时间:2016-05-24 12:49:16

标签: matlab pca colorbar

我有this data我希望进行主成分分析。

特别是对于我想要关联颜色的每个数据点。

这是我的代码:

    for ii=1:size(SBF_ens,1)
        SBF(ii) = SBF_ens(ii, max(find(SBF_ens(ii,:)~=0)) );  %value at the moment of the measurement
    end

    %matrix of data
    toPCA =[
        wind_trend_72h_ens-nanmean(wind_trend_72h_ens);
        wind_trend_24h_ens-nanmean(wind_trend_24h_ens);
        wind_trend_12to18h_ens-nanmean(wind_trend_12to18h_ens);
        wind_trend_0to12h_ens-nanmean(wind_trend_0to12h_ens);
        wind_trend_last6h_ens-nanmean(wind_trend_last6h_ens);
        Mwind12h_ens-nanmean(Mwind12h_ens);
        Mwind24h_ens-nanmean(Mwind24h_ens);
        SBF-nanmean(SBF)]';

    variables = { 'wt72h','wt24h','wt12to18h','wt0to12h','wtLast6h','Mw12h', 'Mw24h', 'SBF'}; %labels 

    %PCA algorithm    
    C = corr(toPCA,toPCA);   

    w = 1./var(toPCA);

    [wcoeff,score,latent,tsquared,explained] = pca(toPCA,'VariableWeights',w);

    coefforth = diag(sqrt(w))*wcoeff;

    metric=decstd_ens; %metric for colorbar

hbi=biplot(coefforth(:,1:2),'scores',score(:,1:2),'varlabels',...
    variables,'ObsLabels', num2str([1:length(toPCA)]'),...
'markersize', 15);

    %plotting
    cm = autumn;
    colormap(cm);


    for ii = length(hbi)-length(toPCA):length(hbi)
        userdata = get(hbi(ii), 'UserData');

        if ~isempty(userdata)

             indCol = ceil( size(cm,1) * abs(metric(userdata))/max(abs(metric)) );%maps decstd between 0 and 1 and find the colormap index


            if indCol==0     %just avoid 0                    
                indCol=1;
            end

            col = cm(indCol,:); %color corresponding to the index

                set(hbi(ii), 'Color', col); %modify the dot's color


        end
    end
    for ii = 1:length(hbi)-length(toPCA)-1 %dots corresponding to the original dimensions are in black
        set(hbi(ii), 'Color', 'k');
    end

    c=colorbar;
    ylabel(c,'decstd') %is this true?
    xlabel(['1^{st} PCA component ',  num2str(explained(1)), ' of variance explained'])
    ylabel(['2^{nd} PCA component ', num2str(explained(2)), ' of variance explained'])

结果数字如下:

除了色条范围外,一切都很好。实际上decstd的值介于0和2之间。实际上我完全不了解颜色条上的值是什么。 有人理解吗?

是否可以重新启动彩条中的数据?那么要了解它们是什么?

1 个答案:

答案 0 :(得分:3)

size(autumn)

向您显示autumn colourmap(实际上是所有colourmaps)的默认长度为64。当您致电colorbar时,默认情况下会使用1n的刻度标签,其中n是您的彩色地图的长度,在本例中为64

如果您希望colourbar ticklabels的映射与您用于使数据适合164之间的映射(即您的此行indCol = ceil( size(cm,1) * abs(metric(userdata))/max(abs(metric)) );)匹配,那么你需要自己设置这个

numTicks = 6;
cAxisTicks = linspace(min(metric), max(metric), numTicks); % or whatever the correct limits are for your data
caxis([min(metric), max(metric)]);
set(c,'YTick', cAxisTicks );