Couleur fond plot

Le problème exposé dans ce sujet a été résolu.

Bonjour !!

Faisant encore (et toujours) du Matlab, je rencontre un nouveau problème.

J'affiche une courbe et j'aimerais que le fond soit par exemple bleu de 1 à 100 et rouge de 100 à 200 (sur l'axe des abscisses). J'ai trouvé comment changer le fond de couleur, mais je n'arrive pas à faire que ce soit seulement entre deux intervalles.

1
2
3
4
time = 0:1:200;
x=1;
plot(time(:),x)
set(gca,'Color',[0.2 0.8 0.8]);

Ci dessus le petit bout de code pour faire ce que j'ai réussi à faire.

Merci beaucoup beaucoup de vos réponses !!!

+0 -0

Il n'y a pas a ma connaissance ce genre de fonctionnalité.

Il va falloir utiliser la ruse.

  1. en utilisant des rectangles ?
  2. en utilisant contourf ?
contourf

Avec contourf on peut faire ca :

En utilisant contourf

et son code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
% on fait la map
for i=1:255
    map(i,:)=[0 0 i/255]; % tu prends les couleurs que tu veux
end

axis([0 pi -1 1])

z=[0 1 ; 0 1]; %noir à gauche, bleu à droite
contourf([0,pi], [-1,1], z,100, 'Linestyle', 'none')
colormap(map)

hold on
plot(0:0.1:pi,cos(0:0.1:pi), 'o-r')
rectangle

Avec les rectangle

1
2
3
4
5
6
7
axis([0 pi -1 1])

rectangle('Position',[0 -1 pi/2 2], 'FaceColor','g', 'Linestyle', 'none')
rectangle('Position',[pi/2 -1 pi/2 2], 'FaceColor','b', 'Linestyle', 'none')

hold on
plot(0:0.1:pi,cos(0:0.1:pi), 'o-r')
bilan

Ca dépend de ce que tu veux faire. La méthode avec contourf est un peu lourde (calcul de la map et tout), celle avec les rectangles est rapide. Après contourf permet les dégradés et même des truc plus bizarre (essaie de mettre z = [0 1 ; 0 10] et t'as un dégradé en coin :P). Contourf permet aussi de garder les ticks, les rectangles se dessinent dessus :/

Autre posibilité

Si ton graph' tu comptes l'enregistrer pour le mettre quelque part d'autre (en png, eps, pdf, etc.) je te conseille de l'enregistrer dans un format vectoriel et de l'éditer via inkscape par exemple :) T'es beaucoup plus libre. Tu plot ce que tu veux, puis tu changes le design après.

Ps : même pas de coloration pour matlab/Octave :O C't'une honte !

+2 -0

Merci beaucoup de ta réponse :)

Je pense que rectangle correspond à ce dont j'ai besoin.

En fait certaines parties de la courbe correspond à des évènements et je dois mettre un rectangle en fond en fonction des évènements. (Je veux surtout qu'on voit que c'est de tel moment à tel moment tel évènement :) ) Je n'ai pas besoin de dégradé du coup donc rectangle correspond bien.

Merci encore pour ta réponse !!

+0 -0

Pas de problème :)

J'ai d'ailleurs vu ailleurs que tu voulais te lancer dans un tuto d'intro à Matlab/Octave. Je veux bien t'aider si tu veux :) Je ne suis pas non plus un expert, mais une intro général je pense pouvoir aider dessus.

Ps : j'ai une méthode encore plus simple que les rectangles

En utilisant contourf (bis)

1
2
3
4
5
6
z=[0 0;1 1]; %ou n'importe quoi, du moment qu'il y a 2 nombres différents
contourf([pi/2,pi], [-1,1], z, 1, 'Linestyle', 'none')
colormap([0 0 1]) % tu choisi la couleur là.

hold on
plot(0:0.1:pi,cos(0:0.1:pi), 'o-r')

C'est plus simple car dans contourf tu donnes directement les x et y. L'astuce c'est de mettre qu'une valeur dans la colormap. De plus grâce à contourf tu gardes les ticks visibles :) .

Si tu penses à faire les rectangles, les courbes restent visible ;)

J'ai réussi à obtenir un résultat correct avec rectangle, donc je pense que je vais rester sur les rectangles ;)

Au fait : je t'ajoute à la rédaction du coup si tu veux :) tu peux m'envoyer des messages si tu as besoin d'explication sur ce que j'ai fait

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte