Je veux faire un tas de parcelles (ou sous-parcelles) avec la même couleur, puis passer à la couleur suivante, faire à nouveau des parcelles, et ainsi de suite. Utiliser les couleurs par défaut sont bien. De plus, mon nombre de parcelles peut dépasser le nombre de couleurs par défaut, donc je devrai le parcourir. Comment puis-je atteindre cet objectif?Dans Matlab comment puis-je contrôler l'itérateur de couleur lors du traçage?
Répondre
Est-ce que quelque chose comme ceci a satisfait vos besoins? Si vous avez beaucoup de graphiques avec des couleurs qui changent fréquemment, vous pouvez créer un dictionnaire avec l'heure de l'index (lorsque le changement de couleur devrait se produire) comme clé et la couleur comme valeur. Le code ci-dessous est plus simple.
% Colors for 10 red plots and 5 black plots
colors = [repmat('r', 1, 10), repmat('b', 1, 5)];
for i = 1:length(colors)
figure; plot(x, y, colors(i));
end
Chaque fois que vous intrigue, vous pouvez simplement choisir au hasard la couleur:
% Create a random RGB color
color = rand(1,3);
% Plot as many times as needed with the newly created random color
plot (X,Y,'color', color)
Vous pouvez parcourir autant de fois que nécessaire
Lorsque vous créez un axe, il a la propriété ColorOrderIndex
qui fait référence à l'index de la prochaine couleur à utiliser. La valeur initiale de ColorOrderIndex
est 1
, et chaque fois que vous ajoutez un nouveau tracé aux mêmes axes (sans effacer, c'est-à-dire avec hold on
), la valeur augmente et passe dans toutes les couleurs (elles-mêmes stockées dans la propriété ColorIndex
comme une matrice 2d avec trois colonnes, où chaque ligne représente un triplet RGB Cette matrice a une valeur par défaut, composée de 7 couleurs (dans Matlab R2015a), mais vous pouvez assigner toutes les autres couleurs que vous voulez). Ainsi, en vérifiant manuellement que la valeur de la propriété ColorOrderIndex
n'augmente pas, vous pouvez conserver la même couleur pour le tracé suivant.
ax = axes;
hold on;
numberOfColors = length(ax.ColorOrder);
ax.ColorOrderIndex = 1;
plot([0,0],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([1,1],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([2,2],[0,1],'LineWidth',2);
% change color
plot([3,3],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([4,4],[0,1],'LineWidth',2);
% change color
plot([5,5],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([6,6],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([7,7],[0,1],'LineWidth',2);
ax.ColorOrderIndex = mod(ax.ColorOrderIndex-2,numberOfColors)+1; % keep same color
plot([8,8],[0,1],'LineWidth',2);
% and so on...
Non qui ne fonctionne pas parce qu'il est pré-défini pas combien de parcelles que je vais faire pour chaque couleur. – LWZ
Commentaires dans MATLAB n'utilisez pas le symbole #, vous pourriez vouloir changer cela – xrr