how to label an array having a range of values with only two texts
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
BR
le 13 Août 2017
Commenté : Walter Roberson
le 18 Août 2017
I have a range of values in an array such as (1:89) and I want to label them as either oranges or apples depending on a threshold assigned in their PDF??
2 commentaires
Chad Greene
le 13 Août 2017
This question is not very clear. What exactly do you want to do? What do you mean by label?
Réponse acceptée
Walter Roberson
le 14 Août 2017
YourArray = randi(89, 1, 1000);
magic_threshold = 0.01381972;
[uvals, ~, uidx] = unique(YourArray);
portions = accumarray(uidx, 1) ./ length(YourArray);
is_orange = portions < magic_threshold;
cmap = [255 165 0; 141 182 0] ./ 255; %orange; apple green
item_type = 2 - is_orange(uidx); %true for orange maps to index 1, false maps to index 2;
item_color = cmap(item_type, :);
dot_size = 24;
x = 1 : length(YourArray);
scatter(x, YourArray, dot_size, item_color);
orange_mask = item_type == 1;
text(x(orange_mask), YourArray(orange_mask), 'orange');
text(x(~orange_mask), YourArray(~orange_mask), 'apple');
The output is nearly unreadable because of all of the text objects, which would tend to suggest that labeling might not be the best of ideas.
6 commentaires
Walter Roberson
le 18 Août 2017
You generate some measure of the separation, somehow, and then you test it against whatever threshold, creating a mask similar to is_orange that tells you which group each individual item belongs to. Then you follow along with the rest of the logic I show above to display the items and to text() the appropriate label into place.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!