Compact way to plot data with relative colors and legend
3 views (last 30 days)
Show older comments
Is there any way to plot data with relative colors and legend in a more compact way than this one ?
% Input
a = {'marathon', 1, 4;
'bank holiday', 3, 6;
'bank holiday', 2, 1;
'concert', 0, 4;
'regatta', 1, 9;
'regatta', 4, 5;
'regatta', 1, 0;
'local fair', 6, 3}
% Non-compact output (and plot)
number_of_colors = length(unique(a(:,1)));
colors = jet(number_of_colors);
[~,~,idx] = unique(a(:,1));
hold on
for i = 1 : length(a)
plot(cell2mat(a(i,2)),cell2mat(a(i,3)),'o',...
'markersize',10,...
'markerfacecolor',colors(idx(i),:),...
'markeredgecolor',colors(idx(i),:),...
'DisplayName',a{i,1});
end
legend(legendUnq())
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1153788/image.png)
0 Comments
Accepted Answer
Davide Masiello
on 12 Oct 2022
Edited: Davide Masiello
on 12 Oct 2022
a = {'marathon', 1, 4;
'bank holiday', 3, 6;
'bank holiday', 2, 1;
'concert', 0, 4;
'regatta', 1, 9;
'regatta', 4, 5;
'regatta', 1, 0;
'local fair', 6, 3};
[u,v,z] = unique(a(:,1));
clrs = jet(length(u));
gscatter([a{:,2}],[a{:,3}],string(a(:,1)),clrs,'.',30)
More Answers (1)
Chunru
on 12 Oct 2022
% Input
a = {'marathon', 1, 4;
'bank holiday', 3, 6;
'bank holiday', 2, 1;
'concert', 0, 4;
'regatta', 1, 9;
'regatta', 4, 5;
'regatta', 1, 0;
'local fair', 6, 3};
a = cell2table(a);
a.a1 = categorical(string(a.a1))
% Non-compact output (and plot)
s = scatter(a,'a2','a3','filled','ColorVariable','a1');
g = categories(a.a1);
h = colorbar;
h.YTick = [1:length(g)]; h.YTickLabel = g;
See Also
Categories
Find more on Data Distribution Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!