2016-05-24 2 views
0

У меня есть this data, из которого я хочу сделать анализ основных компонентов.PCA с цветной панелью

В частности, для каждой точки данных я хочу связать цвет.

Это мой код:

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

Полученная цифра является следующим:

Все хорошо для диапазона Colorbar исключения. Фактически, decstd имеет значения от 0 до 2. На самом деле я вообще не понимаю, что значения на цветной панели. Кто-нибудь это понимает?

Возможно ли перерисовать данные в цветной панели? Чтобы понять, что это такое?

+0

что такое 'hbi'? Где он объявлен/назначен? – Dan

ответ

3
size(autumn) 

показывает, что длина по умолчанию autumn colourmap (фактически всех colourmaps) является 64. Когда вы звоните colorbar, по умолчанию он будет использовать метки меток от 1 до n, где n - это длина вашей цветовой карты, в данном случае 64.

Если вы хотите, картирование colourbar ticklabels, чтобы соответствовать отображение, которое вы использовали, чтобы получить данные, чтобы соответствовать между 1 и 64 (т.е. эта линия твоей 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); 
+1

Спасибо! Я решил проблему с этим: 'caxis ([min (metric), max (metric)]) set (c, 'YTick', linspace (min (metric), max (metric), 6));' – shamalaia

+0

I добавлю это к ответу – Dan

Смежные вопросы