用MATLAB双色图绘制数据,颜色超过1种

时间:2011-02-18 19:09:37

标签: matlab colors plot color-scheme

我有3组数据,其中PCA作为一组进行。我想用不同的颜色突出显示每个变量组。在此之前,我覆盖了3个biplots。这会产生不同的颜色,但会在每个双标图功能使数据偏斜时在数据中产生失真。这导致所有组都被不同的数量倾斜,使得情节不正确。

如何获取PCA分数矩阵(30x3)并将其拆分,使得前10x3是一种颜色,下一个10x3是另一种颜色,第三种10x3是另一种,没有数据偏斜?

3 个答案:

答案 0 :(得分:1)

这是我用来绘制不同颜色的双标图数据的方法。绘图之前的代码行来自biplot.m文件。双模式操作数据的方式保持不变,并在使用重叠双图时停止数据偏移。

这种编码不是最有效的,可以看到可以切割的部分。我想保持代码完好无损,这样就可以看出biplot如何在其中完成。

%%%%%%%%%%%%%%%%%%%%%

xxx = coeff(:,1:3); 
yyy= score(:,1:3);

**%Taken from biplot.m; This is alter the data the same way biplot alters data - having the %data fit on grid axes no larger than 1.**

[n,d2] = size(yyy);  
[p,d] = size(xxx); %7 by 3  
[dum,maxind] = max(abs(xxx),[],1);  
colsign = sign(xxx(maxind + (0:p:(d-1)*p)));  
xxx = xxx .* repmat(colsign, p, 1);  
yyy= (yyy ./ max(abs(yyy(:)))) .* repmat(colsign, 42, 1);  
nans = NaN(n,1);  

ptx = [yyy(:,1) nans]';  
pty = [yyy(:,2) nans]';  
ptz = [yyy(:,3) nans]';  

**%I grouped the pt matrices for my benefit** 

plotdataholder(:,1) = ptx(1,:);  
plotdataholder(:,2) = pty(1,:);  
plotdataholder(:,3) = ptz(1,:);  

**%my original score matrix is 42x3 - wanted each 14x3 to be a different color**

scatter3(plotdataholder(1:14,1),plotdataholder(1:14,2),plotdataholder(1:14,3),35,[1 0 0],'marker', '.');   
hold on;  
scatter3(plotdataholder(15:28,1),plotdataholder(15:28,2),plotdataholder(15:28,3),35,[0 0 1],'marker', '.') ;  
scatter3(plotdataholder(29:42,1),plotdataholder(29:42,2),plotdataholder(29:42,3),35,[0 1 0],'marker', '.');   
xlabel('Principal Component 1');  
ylabel('Principal Component 2');  
zlabel('Principal Component 3');  

答案 1 :(得分:1)

“Skewing”正在发生,因为biplot正在重新规范分数,因此最远的分数是距离1。 axis equal不会解决这个问题。您应该使用scatter3代替biplot

data = rand(30,3);
group = scores(1:10,:)
scatter3(group(:,1), group(:,2), group(:,3), '.b')

hold all
group = scores(11:20,:)
scatter3(group(:,1), group(:,2), group(:,3), '.r')

group = scores(21:30,:)
scatter3(group(:,1), group(:,2), group(:,3), '.g')
hold off

title('Data')
xlabel('X')
ylabel('Y')
zlabel('Z')

或修改代码的scatter3行,使标记的颜色不同。 'marker'后面的参数表示要绘制的符号和符号以及颜色。例如。 '.r'是一个红点。有关标记和颜色参数,请参阅Linespec

scatter3(plotdataholder(1:14,1),plotdataholder(1:14,2),plotdataholder(1:14,3),35,[1 0 0],'marker', '.b');

hold on;

scatter3(plotdataholder(15:28,1),plotdataholder(15:28,2),plotdataholder(15:28,3),35,[0 0 1],'marker', '.r') ;

scatter3(plotdataholder(29:42,1),plotdataholder(29:42,2),plotdataholder(29:42,3),35,[0 1 0],'marker', '.g');

答案 2 :(得分:0)

我不确定它是否会有所帮助,但在重叠图表后尝试axis equal