Controlling colors in scatter plots
39 ビュー (過去 30 日間)
古いコメントを表示
I have an array of label names that have corresponding RGB triplet colors:
% label names
myLabel = ["tomatoes";"carrots";"blueberries";"beans";"bananas"];
myLabelColor = [0.9 0.0 0.0; 1.0 0.7 0.1; 0.4 0.0 0.8; 0.3 0.7 0.0; 0.9 0.9 0.1];
I want to use these custom colors such that the first element of myLabel is always colored with the first element of myLabelColor in my scatter plots and graphs.
Here is some data:
x = rand(10,1);
y = rand(10,1);
groups = ["bananas"; "blueberries"; "bananas"; "beans"; "beans"; "tomatoes";"blueberries";"bananas";"tomatoes";"tomatoes"];
figure;
gscatter(x,y, groups);
Note that the "carrots" label is missing from this data but may appear in another set of data at some point. I don't know which labels will appear in each data set but I know they will always be ones from myLabel array
In the scatter plot, the groups are identified by Matlab's default colors. How can I edit my code so that the groups are identified by my custom colors (bearing in mind that I will want to scale up to larger data sets that may or may not contain all labels)?
0 件のコメント
回答 (1 件)
DGM
2024 年 11 月 30 日 16:04
編集済み: DGM
2024 年 11 月 30 日 16:07
This is what I threw together, but there's probably a better way to do this; I haven't really used gscatter() for anything before.
% fake data
x = rand(10,1);
y = rand(10,1);
groups = ["bananas"; "blueberries"; "bananas"; "beans"; "beans"; "tomatoes";"blueberries";"bananas";"tomatoes";"tomatoes"];
% label naming info
myLabel = ["tomatoes";"carrots";"blueberries";"beans";"bananas"];
myLabelColor = [0.9 0.0 0.0; 1.0 0.7 0.1; 0.4 0.0 0.8; 0.3 0.7 0.0; 0.9 0.9 0.1];
% gscatter() will list groups based on order of appearance
% figure out which colors are used and the order they're listed
ugroups = unique(groups,'stable');
% then create a new color table ordered to fit the groups as they appear
[islabeled,idx] = ismember(ugroups,myLabel);
if any(~islabeled) % just to avoid confusion
error('grouping variable contains groups which have no assigned label');
end
CT = myLabelColor(idx,:);
% plot it
hs = gscatter(x,y,groups,CT);
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Graphics Object Identification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!