2017-04-21 1657 views
0

我需要爲散點圖的特定點指定某些顏色。我已經寫了這樣的事情:在MATLAB中爲散點圖的某些點指定某些顏色

Color = zeros(size(Check,1),1); 

for i = 1:size(Check,1) 
    if Check(i) == 0 
     Color(i) = [0.3010 0.7450 0.9330]; 
    elseif Check(i) == 1 
     Color(i) = [0.4660 0.6740 0.1880]; 
    elseif Check(i) == 2 
     Color(i) = [0.9290 0.6940 0.1250]; 
    elseif Check(i) == 3 
     Color(i) = [0.8500 0.3250 0.0980]; 
    elseif Check(i) == 4 
     Color(i) = [0.6350 0.0780 0.1840]; 
    end 
end 

scatter(x,y,Color,'filled','s'); 

要注意的是 'X', 'Y', '顏色' 和 '檢查' 具有相同的尺寸(15000×1)。 '檢查'中的數字是'0','1','2','3'或'4'。我只需要根據我在「檢查」矩陣中的數字爲散點圖分配五種​​不同的顏色。顏色應該是我在代碼中使用的那些顏色,因爲我需要這個陰謀與我已有的另一個條形圖匹配。任何幫助將不勝感激!

回答

1

MATLAB中的散點圖有CData屬性,可用於將顏色分配給圖。這可以是nx3矩陣,就像在Color變量中一樣。但是,CData屬性也可以是矢量,並且您可以使用colormap()函數!

剛開始時一樣adjpayot那樣:

Color = [0.3010 0.7450 0.9330; 
0.4660 0.6740 0.1880; 
0.9290 0.6940 0.1250; 
0.8500 0.3250 0.0980; 
0.6350 0.0780 0.1840]; 

% Assume you have a figure open already 
scatter(x,y,'filled', 'CData', Check); 
colormap(Color); 
colorHandle = colorbar(); 
+0

感謝您的回答。它效果很好。但是你知道我可以如何爲這5種不同顏色的散點圖添加一個圖例嗎? – Antonio

+0

嗯,這是一個混亂的方式來做到這一點,但我找不到更乾淨的方法。基本上,我們需要創建5個不同的散點圖,以便圖例條目參考這5個不同的圖。 (x(Check == 1),y(Check == 1),'filled','Cdata',Check(Check == 1));'';'; (x(Check == 2),y(Check == 2),'filled','CData',Check(Check == 2))' ...對3-5做相同的處理 ' hold';' 'legend('1','2','3','4','5');' – user2831602

+0

非常感謝您的回答。我嘗試了你所說的,但它給了我整個傳奇只有一種顏色!你對什麼是錯的有什麼想法嗎?我也使用colormap(Color),但它不起作用。 – Antonio

1

您需要ColorColor = zeros(size(Check,1),3); 這是因爲顏色是RGB值,所以每個顏色通道需要一個數字。 這意味着你的代碼的其餘部分必須是:

Color = zeros(size(Check,1),3); 

for i = 1:size(Check,1) 
    if Check(i) == 0 
     Color(i,) = [0.3010 0.7450 0.9330]; 
    elseif Check(i) == 1 
     Color(i,:) = [0.4660 0.6740 0.1880]; 
    elseif Check(i) == 2 
     Color(i,:) = [0.9290 0.6940 0.1250]; 
    elseif Check(i) == 3 
     Color(i,:) = [0.8500 0.3250 0.0980]; 
    elseif Check(i) == 4 
     Color(i,:) = [0.6350 0.0780 0.1840]; 
    end 
end 

scatter(x,y,Color,'filled','s'); 

如果你願意,你還可以得到通過做擺脫循環:

Color=[0.3010 0.7450 0.9330; 
0.4660 0.6740 0.1880; 
0.9290 0.6940 0.1250; 
0.8500 0.3250 0.0980; 
0.6350 0.0780 0.1840] 

scatter(x,y,Color(Check+1,:),'filled','s'); 

在該代碼中我使用Check索引在Color中指定的顏色列表。添加另一種情況非常簡單,只需向數組中添加一個額外的顏色即可。

+0

很大的幫助,謝謝! – Antonio