Comment faire de beaux graphiques avec TikZ et PGFPLOTS
et si vous êtes sages on fera peut-être des camemberts.
— Et bien non on ne fera pas de camemberts.
— Ben pourquoi ?
— Parce que c’est moche et ça sert à rien.
Le but de ce tutoriel est d’apprendre à réaliser des graphiques à l’aide de TikZ et PGFPLOTS. Pourquoi ne pas utiliser un logiciel spécialisé comme un tableur ? Il y a plusieurs raisons :
- l’exportation d’un graphique fait à l’aide d’un tableur en un document compris par LaTeX n’est pas toujours aisé et tu te retrouves souvent à exporter ton graphique sous un format image, qui perd beaucoup en qualité ;
- l’insertion dans LaTeX notamment au niveau de l’échelle, n’est pas toujours heureuse. Tu es amené à souvent réduire sa taille, rendant souvent des parties du graphique illisibles (taille de caractère trop petite, pixelisation,. . .) ;
- tu perds la continuité typographique de ton document (polices différentes).
Donc pour des graphiques parfaitement intégrés à ton document, utilise le couple TikZ et PGFPLOTS, en plus ce n’est guère plus compliquer à utiliser qu’un tableur.
Dans cette fiche on va se limiter à des opérations de base, on se contentera de graphique simple avec un minimum de réglages.
Sommaire
- Pour commencer
- Taille du graphique
- N’afficher que 2 côtés du graphique
- Ajouter une grille
- Ajouter un label pour les x ou les y
Pour commencer
Pour illustrer notre propos nous allons utiliser les précipitations et les températures relevées dans la région lilloise pour le mois de décembre 2004.
Les deux premières choses à faire c’est de charger les packages tikz et pgfplots :
\usepackage{tikz} \usepackage{pgfplots}
Si tu es sous ConTeX :
\usemodule[pgfplots]
Le module TikZ est chargé automatiquement.
Maintenant nous allons commencer notre graphique. Tu ouvres un environnement TikZ :
\begin{tikzpicture} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \stoptikzpicture
Pour être lisible un graphique se doit d’avoir des axes, ce que tu vas réaliser grâce à l’environnement axis. Comme tu ne lui as encore précisé aucune donnée PGFPLOTS affiche un truc par défaut avec des coordonnées comprise entre 0 et 1 :
\begin{tikzpicture} \begin{axis} \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis \stopaxis \stoptikzpicture
Taille du graphique
Évidement l’environnement axis accepte des options.
Attention les options sont séparées par des virgules.
Tu peux jouer sur la taille du graphique :
\begin{tikzpicture} \begin{axis}[height=8cm,width=5cm] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[height=8cm,width=5cm] \stopaxis \stoptikzpicture
d’autre exemples :
\begin{tikzpicture} \begin{axis}[scale=0.5] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[scale=0.5] \stopaxis \stoptikzpicture
\begin{tikzpicture} \begin{axis}[xscale=0.7, yscale=0.4] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[xscale=0.7, yscale=0.4] \stopaxis \stoptikzpicture
Je te rappelle que tu peux jouer aussi avec les options liées à tikzpicture pour adapter ton graphique à ton document :
\begin{tikzpicture}[scale=0.5] . . .
Sous ConTeXt :
\starttikzpicture[scale=0.5] . . .
N’afficher que 2 côtés du graphique
\begin{tikzpicture} \begin{axis}[axis x line=bottom,axis y line = left] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[axis x line=bottom,axis y line = left] \stopaxis \stoptikzpicture
Dans l’autre sens :
\begin{tikzpicture} \begin{axis}[axis x line=top,axis y line = right] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[axis x line=top,axis y line = right] \stopaxis \stoptikzpicture
Ajouter une grille
\begin{tikzpicture} \begin{axis}[grid=major] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[grid=major] \stopaxis \stoptikzpicture
Ajouter une grille uniquement pour les x
\begin{tikzpicture} \begin{axis}[xmajorgrids] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[xmajorgrids] \stopaxis \stoptikzpicture
Ajouter une grille uniquement pour les y
\begin{tikzpicture} \begin{axis}[ymajorgrids] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[ymajorgrids] \stopaxis \stoptikzpicture
Ajouter un label pour les x ou les y
\begin{tikzpicture} \begin{axis}[xlabel={L’axe des x},ylabel={L’axe des y}] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[xlabel={L’axe des x},ylabel={L’axe des y}] \stopaxis \stoptikzpicture
Ajouter un titre pour ton graphique
\begin{tikzpicture} \begin{axis}[title={Le titre du graphique}] \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[title={Le titre du graphique}] \stopaxis \stoptikzpicture
Ajouter des données
\begin{tikzpicture} \begin{axis} \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \stopaxis \stoptikzpicture
Le système de coordonnées est le même que celui de TikZ, voir TikZ, le système de coordonnées et les chemins (path). Je te rappelle que les décimales sont notées à l’anglo-saxonne avec un point. Comme toutes commande TikZ, n’oublie pas le ; à la fin \addplot coordinates {. . .};
Avec un titre et des labels :
\begin{tikzpicture} \begin{axis}[xlabel={heures},ylabel={\degres C}, title={Températures relevées à Lille le 16 décembre 2004}] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[xlabel={heures},ylabel={\textcelsius}, title={Températures relevées à Lille le 16 décembre 2004}] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \stopaxis \stoptikzpicture
ConTeXt à la commande \textcelsius pour écrire °C (et \textdegree pour uniquement le °)alors que sous LaTeX il faut écrire \degres C
Alors il n’est pas joli notre graphique et pas si compliqué à faire. Bon il y a quand même un petit problème. Si la 25e heure et très cinématographique, elle n’a rien de scientifique. Il faut donc donner à PGFPLOTS des limites.
Limites du graphique
Tu les fixes par xmin, xmax, ymin, ymax.
\begin{tikzpicture}
\begin{axis}[xlabel={heures},ylabel={\degres C}, title={Températures relevées à Lille le 16 décembre 2004}, xmax=24] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[xlabel={heures},ylabel={\textcelsius}, title={Températures relevées à Lille le 16 décembre 2004}, xmax=24] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \stopaxis \stoptikzpicture
Enlever les marges
Tu as remarqué que PGFPLOTS ajoute des marges entre les axes et le graphique. Si tu veux les supprimer tu utilises l’option enlarge x limits=false. Note que dans ce cas tu n’as plus besoin de mettre xmax=24, puisque les axes s’arrête aux limites du graphique. Il existe également un enlarge y limits=false, pas très utile dans notre exemple.
\begin{tikzpicture}
\begin{axis}[enlarge x limits=false, xlabel={heures}, ylabel={\degres C}, title={Températures relevées à Lille le 16 décembre 2004}] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \end{axis} \end{tikzpicture}
Sous ConTeXt :
\starttikzpicture \startaxis[enlarge x limits=false, xlabel={heures}, ylabel={\textcelsius}, title={Températures relevées à Lille le 16 décembre 2004}] \addplot coordinates { (0,2.6) (1,2.5) (2,2.6) (3,2.3) (4,2.2) (5,2.3) (6,3.1) (7,3.3) (8,3.3) (9,3.8) (10,3.8) (11,4.2) (12,4.8) (13,5) (14,5.7) (15,6.2) (16,6.8) (17,7.1) (18,7.6) (19,7.7) (20,7.2) (21,6) (22,5.6) (23,6.3)}; \stopaxis \stoptikzpicture
Changer l’aspect du graphique
Sympa cette couleur bleue avec les petits ronds comme marqueur, mais comment on fait pour changer ? Deux possibilités, soit tu veux tout changer, soit tu veux ajouter une modification, comme par exemple supprimer les marqueurs tout en gardant la couleur bleue. Dans le premier cas tu utilises \addplot[options] et dans le deuxième \addplot+[options]. Voici 3 exemples du même graphique :
\addplot[]
\addplot[mark=none]
\addplot+[mark=none]