Tracés graphiques avec Scilab
Tracés graphiques avec Scilab
Gf = {(x, f (x)) | x ∈ R}
Le graphe d’une fonction est donc l’ensemble des couples (x, y) ∈ R × R qui
satisfont l’équation : y = f (x). Formellement, la courbe de f correspond au
tracé de l’ensemble infini de ces points. Concrètement, on ne peut tracer à
la main chacun de ces points. On se contente donc d’obtenir une allure de la
courbe à l’aide d’une étude graphique : croissance de la fonction, calcul des
tangentes aux points d’intérêt, calcul des asymptotes.
Fig. 1 Premier tracé Fig. 2 Second tracé
I.2. Traduction en Scilab Deux points sont à souligner sur ce premier tracé :
L’approche Scilab est différente de l’approche mathématique consistant • par défaut, les points successifs sont reliés entre eux.
à obtenir l’allure de la courbe. C’est en effet l’approche « point par point » qui
• par défaut, le tracé s’effectue en couleur bleue.
est retenue. Et même si seul un nombre fini de points peut être représenté,
la puissance de calcul permet que ce nombre soit suffisamment grand pour
fournir une très bonne approximation de la courbe souhaitée. Le nuage de Effectuons un nouveau tracé, par exemple : plot(X,X). Comme le montre
points obtenu est alors complété en reliant les paires de points successifs, ce la figure 2, le tracé s’effectue dans la fenêtre précédente et avec la même
qui permet d’obtenir un tracé continu. Deux fonctions permettent de réaliser couleur. Nous développons maintenant plusieurs solutions qui permettent de
ce type de tracés : plot2d et plot. distinguer ces tracés.
1
ECE1-B 2015-2016
2
ECE1-B 2015-2016
On obtient donc les trois fenêtres distinctes suivantes. II.3.c) La fonction subplot
L’aide de Scilab (help subplot) définit la fonction subplot comme suit.
L’appel subplot(n,p,k) divise la fenêtre graphique courante en une matrice
n×p composée de sous-fenêtres et sélectionne la kème sous-fenêtre comme
emplacement de dessin par défaut. Le numéro de la sous-fenêtre est compté
ligne par ligne, c’est à dire que l’emplacement (i, j) de la matrice porte le
numéro j + n × (i − 1). On insiste sur cette numérotation qui ne correspond
pas à la numérotation linéaire des matrices présentée dans le chapitre précé-
dent (numérotation colonne par colonne).
Fig. 4 Fenêtre 0 Fig. 5 Fenêtre 5 Fig. 6 Fenêtre 6
Pour illustrer ce procédé, on réalise les appels suivants.
Concernant la fenêtre 0, on remarque que le troisième tracé s’effectue par
−−> subplot(2,3,1),plot(X,[Y;X;T])
dessus les précédents tracés et de la même couleur que le premier tracé (bleu).
−−> subplot(2,3,5),plot(X,[Z;10?T])
−−> subplot(2,3,3),plot(X,-X)
II.3.b) La fonction clf
Le terme clf est une abréviation de l’anglais clear current graphic figure. La fenêtre 1 (en position (1, 1)) contient le premier tracé. La fenêtre 5 (en
Cette fonction permet de supprimer le contenu de la fenêtre graphique cou- position (2, 2)) contient le deuxième tracé. La fenêtre 3 (en position (1, 3))
rante. On peut en faire deux utilisations : contient le troisième tracé.
• clf() : utilisée sans paramètre, la fonction clf supprime le contenu de la
fenêtre graphique courante.
• clf(num) : utilisée avec le paramètre num, la fonction clf permet de sup-
primer le contenu de la fenêtre portant le numéro num.
• clf(Vnum) : utilisée avec le vecteur Vnum, la fonction clf permet de sup-
primer le contenu des fenêtres dont le numéro appartient au vecteur Vnum.
× soit faire appel à la fonction xdel dont l’utilisation est analogue à celle de
Fig. 7 Matrice de fenêtres graphiques
la fonction clf (même type de paramètre).
Par exemple, xdel([0,5,6]) supprime l’ensemble des fenêtres graphiques.
3
ECE1-B 2015-2016
II.4. Les options de tracé On obtient alors les trois fenêtres suivantes.
II.4.a) Tracé simple
La fonction plot offre un certain nombre d’options de tracés : couleur
du trait, marquage des points, forme du trait. Ces fonctionnalités sont dis-
ponibles via un argument optionnel de la fonction plot. Plus précisément, on
utilisera la syntaxe suivante.
plot(abs,ord,opt)
L’argument optionnel est de type string (apparaît entre guillemets ' ') et Quelques remarques concernant ces options de tracés :
est construit en prenant au plus un élément dans chacun des tableaux (non • dans le dernier appel, nous n’avons pas spécifié d’option pour la forme du
complets) ci-dessous. trait. Ceci annule le tracé reliant les points.
• il n’y a pas d’ordre à respecter lorsque l’on tape les options. Ainsi les
Commande Couleur Commande Marquage
options 'rx:' et ':xr' ont la même interprétation.
r Rouge + Plus • les tableaux précédents ne sont pas complets. Pour plus de détails, se référer
4
ECE1-B 2015-2016
5
ECE1-B 2015-2016
II.6. Tracé via la fonction plot2d II.6.b) Les différences entre plot et plot2d
La fonction plot2d est une alternative à la fonction plot. Sa syntaxe de La différence principale entre ces deux fonctions est la gestion des op-
base est proche de celle de la fonction plot. tions de tracés. La fonction plot2d intègre, dans son appel, plus d’options,
notamment la gestion de la légende et la définition d’un cadre d’affichage. Il
II.6.a) Les points communs entre plot et plot2d n’est pas possible d’utiliser la syntaxe présentée dans le paragraphe II.4..
La fonction plot2d partage de nombreuses fonctionnalités avec la fonc-
Afin de détailler les fonctionnalités de la fonction plot2d, on se concentre
tion plot. Plus précisément :
sur un appel.
• tracé simple (II.1.) : on utilisera la syntaxe plot2d(abs,ord) où abs
et ord sont des vecteurs de même nature (deux vecteurs lignes ou deux −−> scf();plot2d(X',[Z;Y;T]',[-3,23,10],leg="Courbe 1
vecteurs colonnes) et de même taille. @Courbe 2@Courbe 3",rect=[-1,-1,8,30])
• tracé multiple (II.2.) : on utilisera ici la syntaxe, légèrement différente
• Les deux premiers paramètres définissent les tracés (cf précédent).
donnée par plot2d(C_abs,[C_ord1,...,C_ordn]). La différence se situe
dans le fait que C_abs et C_ordi sont des vecteurs colonne que l’on sépare • Le troisième paramètre est un vecteur d’entiers relatifs qui permet de dé-
par des « , » et non plus des « ; ». Cette syntaxe par colonnes peut être finir la couleur de chaque tracé (1 nombre par tracé) :
utilisée avec la fonction plot. × un nombre positif définit une couleur et un trait plein.
• gestion des fenêtres (II.3.) : les fonctions scf, clf et subplot s’utilisent × un nombre négatif définit un nuage de points et son marquage.
comme précédent. C’est bien normal : ces fonctions opèrent sur les fenêtres (l’appel getcolor() fournit la correspondance nombre-couleur)
graphiques sans se soucier de comment elles sont créées. • Le quatrième paramètre définit la légende associée à chaque tracé. On
• annotation (II.5.) : la remarque précédente est valide avec les fonctions utilisera la syntaxe : leg="nom_1@...@nom_n" où nom_i est le nom associé
xtitle et legend. au tracé i.
En résumé, il faut simplement veiller à adopter la syntaxe par colonnes. No- (ce paramètre n’étant pas très flexible, il est recommandé d’utiliser legend)
tez que le passage de l’une à l’autre peut se faire très simplement grâce à • Le dernier paramètre de l’appel précédent définit un cadre d’affichage. On
l’opérateur transposée. En effet, la matrice [C_ord1,...,C_ordn]' n’est rien utilisera la syntaxe rect=[xmin,ymin,xmax,ymax] pour définir le cadre
d’autre que la matrice [C_ord1',...,C_ordn']. dont le point bas-gauche est (xmin,ymin) et dont le point haut-droit est
(xmax,ymax).
Ainsi, si X, Y et T sont des vecteurs lignes de même taille, les appels :
× scf();plot(X,[Y;X;T])
On notera que les tracés pointillés ne sont pas pris en charge par la fonc-
× scf();plot(X',[Y;X;T]') tion plot2d. Le paramètre défini par rect doit se voir comme une possibilité
× scf();plot2d(X',[Y;X;T]') de zoom (avant ou arrière). C’est le gain principal que l’on obtient en uti-
sont tous valides et permettent d’obtenir le même tracé. lisant cette fonction. Pour plus de détails, se reporter à la rubrique d’aide
Par contre, l’appel : plot2d(X,[Y;X;T]) fera apparaître un message d’erreur. (help plot2d).
6
ECE1-B 2015-2016
Le résultat de l’appel précédent est représenté en figure 11. Il est intéressant de remarquer qu’avec ce codage, les fonctions f et g peuvent
être utilisées avec n’importe quel objet de type constant. Ainsi, ces fonctions
peuvent prendre en paramètre aussi bien un réel Scilab qu’une matrice de
réels Scilab.
−−> f(3),g(5)
ans =
9.
ans =
0.07
−−> f([1,2,3,4,5]),g([1,2,3,4,5])
ans =
Fig. 11 Un tracé avec plot2d
1. 4. 9. 16. 25.
ans =
On remarque que la légende est mal située et finalement illisible. Comme
3.68 1.35 0.5 0.18 0.07
précisé précédemment, on préférera la fonction legend à l’option leg.
7
ECE1-B 2015-2016
Avec cette définition, on obtient une fonction qui ne peut plus être utilisée Ainsi, pour tracer la fonction f, il suffit de :
sur des vecteurs. 1) choisir un vecteur d’abscisses X, rangées dans l’ordre croissant.
−−> fMult([1,2,3,4,5]) 2) calculer le vecteur d’ordonnées correspondant : f(X).
!--error 10 3) réaliser l’appel : plot(X,f(X)).
Multiplication incohérente.
Évidemment, ce mécanisme n’est possible que si la fonction que l’on cherche
III.1. Une première syntaxe à tracer peut prendre un vecteur en paramètre.
On a vu en introduction que le tracé d’une fonction f définie sur R cor- −−> scf();plot(X,fMult(X))
respond à dessiner l’ensemble des points {(x, f (x)) | x ∈ R}. On peut se !--error 10
baser sur cette idée pour effectuer le tracé d’une fonction en Scilab. Multiplication incohérente.
8
ECE1-B 2015-2016
III.3. Contrôle du nombre de points utilisé pour le tracé IV. Tracés d’histogrammes
Les figures issues des appels précédents ne sont pas satisfaisantes. En ef- IV.1. Histogrammes classiques : la fonction histplot
fet, les tracés obtenus ne sont pas suffisamment lisses. Ceci est dû au faible
nombre de points utilisé pour effectuer ces tracés. Les histogrammes sont des outils de représentation graphique des don-
nées qui sont particulièrement fréquents en statistiques. Dans l’exemple clas-
Dans l’exemple précédent, il s’agit de modifier la définition de X afin d’aug- sique d’utilisation, on dispose d’un jeu de données fourni sous la forme d’un
menter le nombre de points dans les tracés. Pour ce faire, deux solutions : vecteur. Analyser cet ensemble de données consiste à en effectuer une répar-
tition selon certaines classes i.e. comptabiliser les données comprises entre
−−> scf(); X=[-5:0.1:5]; plot(X,f) deux bornes a et b, celles entre b et c, celles entre c et d . . .
On obtient le tracé présenté en figure 14.
Commençons par une étude pratique d’un jeu de données aléatoires D.
−−> scf(); X=linspace(-5,5); plot(X,g) −−> D=rand(1,50);
−−> scf();histplot(10,D)
On obtient le tracé présenté en figure 15.
• La première variable D définit un vecteur ligne contenant 50 réels choisis
aléatoirement entre 0 et 1.
• L’appel histplot(10,D) permet de réaliser l’histogramme de répartition
du vecteur D en découpant l’espace en 10 classes.
On obtient le tracé présenté en figure 16.
L’aspect segmenté a disparu pour laisser la place à des courbes plus lisses.
Les figures obtenues sont donc satisfaisantes. Lorsque cela n’est pas le cas, il
faut encore augmenter le nombre de points de X :
× soit en diminuant le pas 0.1 (dans la première syntaxe).
Fig. 16 Répartition de rand
× soit en ajoutant un troisième argument (nombre n>100) à linspace
(dans la seconde syntaxe).
9
ECE1-B 2015-2016
10
ECE1-B 2015-2016
IV.2. Histogrammes multi-barres : la fonction bar + Dans le second appel, on a précisé l’option 'stacked' (empilé en anglais),
qui permet d’obtenir un histogramme empilé.
Dans certains cas, les éléments du jeu de données sont triés non seulement
Cet appel est présenté en figure 20.
par classes mais aussi à l’aide d’un autre indicateur. Ainsi, chaque classe est
elle-même découpée en sous-classe. La représentation graphique associée à
ce genre de cas est un histogramme multi-barres dans lequel chaque classe
est représentée par plusieurs barres.
11
ECE1-B 2015-2016
Pour les histogrammes il est aussi intéressant de nommer les différentes Modification de l’objet Axes courant
classes. La procédure est plus compliquée que pour les titres et légendes.
Revenons à notre question de départ. On souhaite modifier l’étiquetage
Pour pouvoir la comprendre, il faut s’intéresser à aux entités graphiques
de l’axe des abscisses i.e. modifier un paramètre de l’objet Axes courant.
dans Scilab.
−−> a=gca();
Entités graphiques en Scilab −−> a.x_ticks.labels=["Mag 1";"Mag 2";"Mag 3";"Mag 4"];
En Scilab, les entités graphiques obéissent à une hiérarchie arborescente. D’autre part, on peut en profiter pour modifier les bornes du cadre du dessin.
Tout en haut de cette hiérarchie (i.e. à la racine de l’arbre), se trouve une Le rectangle précédent avait pour point bas gauche (0.5,50) et pour point
entité appelée Figure. haut droit (4.5,550). Agrandissons ce cadre pour qu’il soit défini du point
• L’entité Figure : cette entité définit les paramètres de la fenêtre graphique. (0.5,0) au point droit (4.5,600).
+ gcf() : abréviation de get current figure. Permet d’accéder à la figure −−> a=gca();
courante. L’appel gcf() affiche les propriétés de l’objet Figure : des −−> a.data_bounds=[0.5,0;4.5,600];
paramètres modifiables et des fils (children en anglais).
+ Les paramètres modifiables concernent les éléments en dehors du tracé. Le tracé obtenue est représenté en figure 21. On rappelle que le fond a été
On peut notamment changer la couleur de l’arrière plan (background) modifié lors de l’étude de l’entité Figures, ce qui explique la couleur bleu
de la figure comme le montre l’appel suivant. clair entourant le cadre.
−−> f=gcf();
−−> [Link]=4;
+ L’entité Figure admet l’entité Axes comme fils, qui et donc le deuxième
niveau de la hiérarchie des entités graphiques.
• L’entité Axes : définit les paramètres du cadre de dessin.
+ gca() : abréviation de get current axes. L’appel gca() affiche les pa-
ramètres modifiables de l’objet Axes et ses fils.
+ Les paramètres modifiables sont les éléments du cadre de dessin :
bornes / découpage / étiquetage des axes. Fig. 21 Avec étiquetage
+ L’entité Axes admet l’entité Coumpound comme fils (non développé ici).
Pour plus de détails on pourra accéder à la rubrique d’aide correspondante
par l’appel help "graphic entities".
12