Les graphiques sous TikZ

On a vu dans un précédent billet comment dessiner des figures vectorielles grâce à TikZ. Maintenant, on va s’intéresser à un autre point fort de TikZ, fourni par PGFPlots : la création de graphiques.

 

Exemple minimal

Tout se passe dans l’environnement axis (fourni par pgfplots), dans lequel on ajoute les tracés des courbes avec la commande \addplot (que je détaillerai par la suite). Voici donc un exemple de code minimal, et le rendu qui lui est associé :

\usepackage{pgfplots} % PGFPlots charge automatiquement TikZ
\begin{document}
	\begin{tikzpicture}
	  \begin{axis}
		\addplot coordinates {(0,0) (0.1,200) (0.2,300) (0.3,350) (0.4,375) }; % Tracé point à point
		\addplot expression[domain=0:0.5]{400*(1-exp(-5*x))}; % Équation analytique
	  \end{axis}
	\end{tikzpicture}
\end{document}
Graphique avec PGFPlots : cas minimal
Graphique avec PGFPlots : cas minimal

Personnalisation des axes et de la légende

Dans l’exemple précédent, on a laissé PGFPlots gérer le dimensionnement des axes. On peut bien sûr prendre la main dessus, et agrémenter le tout de quelques informations :

\usepackage{pgfplots}
\begin{document}
	\begin{tikzpicture}
		\begin{axis}[	grid= major ,
				width=0.8\textwidth ,
				xlabel = {$\varepsilon$ (\%)} ,
				ylabel = {$\sigma$ (MPa)} ,
				xmin = 0, xmax = 0.5,
				ymin = 0, ymax = 400,
				legend entries={Courbe 1, Courbe 2},
				legend style={at={(0,1)},anchor=north west}]
			\addplot coordinates {(0,0) (0.1,200) (0.2,300) (0.3,350) (0.4,375) }; % Tracé point à point
			\addplot expression[domain=0:0.5]{400*(1-exp(-5*x))}; % Équation analytique
		\end{axis}
	\end{tikzpicture}
\end{document}
Exemple plus complet de graphique PGFPlots
Exemple plus complet de graphique PGFPlots

Sachez qu’il est possible de définir le nom de chaque courbe « à la volée », c’est à dire après chaque \addplot, grâce à la commande \addlegendentry. Le code suivant est donc strictement équivalent au précédent :

\begin{axis}[	grid= major ,
		width=0.8\textwidth ,
		xlabel = {$\varepsilon$ (\%)} ,
		ylabel = {$\sigma$ (MPa)} ,
		xmin = 0, xmax = 0.5,
		ymin = 0, ymax = 400,
		legend entries={, Courbe 2},
		legend style={at={(0,1)},anchor=north west}]
	\addplot coordinates {(0,0) (0.1,200) (0.2,300) (0.3,350) (0.4,375) }; % Tracé point à point
		\addlegendentry{Courbe 1}
	\addplot expression[domain=0:0.5]{400*(1-exp(-5*x))}; % Équation analytique
		\addlegendentry{Courbe 2}
\end{axis}

Utilisation des \addplot

Dans les exemples précédents, on a déjà vu deux moyens de définir une courbe : en lui donnant les coordonnées de chaque point ou en utilisant une expression mathématique. Mais il est aussi possible de lire un fichier de point.

Les valeurs doivent être en colonnes, séparées par des espaces ou des tabulations. Il est possible de désigner les colonnes par leurs numéros (la première étant 0) :

\addplot table[x index=0, y index=5] {data.txt};

Mais il est aussi possible de donner un nom plus explicite à chaque colonne, dans le fichier de données lui-même, en première ligne. PGFPlots ne lira les valeurs qu’à partir de la deuxième ligne. Exemple si on a pris le soin d’appeler intelligemment la première colonne « Deformation » et la deuxième « contrainte » :

\addplot table[x=Deformation, y=contrainte] {data.txt};

Options de addplot

Les options de chaque addplot doivent être précisées entre crochets. Exemple si on ne veut pas de marqueur et tracer la courbe en bleu, de largeur 1 point :

\addplot[mark=none, draw=blue, line width=1pt]

Si vous ne voulez spécifier que certaines options, et laisser PGFPlots gérer le reste (par exemple ne spécifier que l’épaisseur mais laisser PGFPlots utiliser ses couleurs par défaut), il suffit de rajouter un « + » entre addplot et lesdites options :

\addplot+[<options>]

Ajouter des annotations

On retrouve bien sûr toutes les commandes propres à TikZ, mais il faut penser à préciser « axis cs : » avant les coordonnées, pour que TikZ fasse la correspondance entre les coordonnées suivant les axes et les coordonnées effectives (en cm). La commande pin sert précisément à ajouter des annotations :

\node at (axis cs:306,127) [pin={-45:Good point!},inner sep=0pt] {};

Le « -45 » de mon exemple donne l’angle entre le pointeur et l’horizontale.

 

Options supplémentaires pour les axes

Il est bien sûr possible de dessiner des graphiques en coordonnées semi-logarithmiques ou logarithmiques :

\begin{semilogxaxis}
  ...
\end{semilogxaxis}
\begin{loglogaxis}
  ...
\end{loglogaxis}

On peut imposer chaque valeur affichée d’un axe grâce à la commande xtick, en option de axis, à qui on donne la liste exhaustive des valeurs à afficher sur un axe :

xtick={8,16,24,32,40,48,56,64}

Pour aller plus loin

On peut bien sûr lire la documentation officielle de pgfplots pour des informations exhaustives. Plus sobrement, je conseille les fiches de Bébert (en français)  qui proposent déjà une approche assez poussée.

Si vous cherchez des exemple de graphiques : allez faire un tour de ce coté là.

Bonne compilation !