PGFPlots : effectuer des opérations sur les valeurs d’un tableau

Lorsque vous générez un fichier de points, dans l’espoir de l’utiliser directement pour tracer des graphiques avec TikZ/PGFPlots, il vous arrive d’oublier de modifier certaines colonnes, et ça vous rend furax ? Voici comment effectuer des opérations mathématiques entres les valeurs des fichiers de point.

Cas où on repère les colonnes par leurs numéros

Mettons que vos données soient enregistrées dans le fichier Data.txt. Si vous voulez afficher les valeurs de la deuxième colonne en fonction de la première, alors vous aurez quelque-chose dans ce goût là :

\begin{axis}
	\addplot table[x index=0, y index=1]  {Data.txt};
\end{axis}

Mettons maintenant que vous vouliez diviser les valeurs de la deuxième colonne par 10. Alors vous devrez utiliser le code suivant :

\begin{axis}
	\addplot table[x index=0, y expr=\thisrowno{1}/10]  {Data.txt};
\end{axis}

J’avais déjà fait allusion à cette méthode dans un précédent billet : la commande \thisrowno{n} retourne la valeur de la n-ième colonne, à laquelle vous pouvez appliquer une fonction mathématique. Exemple pour afficher le produit de la première et de la deuxième colonne en fonction de la première :

\begin{axis}
	\addplot table[x index=0, y expr=\thisrowno{0}*\thisrowno{1}]  {Data.txt};
\end{axis}

Cas où les colonnes sont nommées

Si vous avez donné un nom à chacune des colonnes, par exemple « colonne1 », « colonne2 » etc., alors votre code initial sera :

\begin{axis}
	\addplot table[x=colonne1, y index=colonne2]  {Data.txt};
\end{axis}

Du coup, plutôt que d’utiliser le numéro de chaque colonne comme on l’a fait plus haut, on va continuer d’appeler les colonnes par leurs noms, il suffit d’utiliser la commande \thisrow plutôt que \thisrowno, et d’utiliser les labels des colonnes. Exemple pour diviser toutes les valeurs de « colonne2 » par 10 :

\begin{axis}
	\addplot table[x=colonne1, y expr=\thisrow{colonne2}/10]  {Data.txt};
\end{axis}

Pour aller plus loin

Je vous encourage à aller voir la section correspondante, page 55, de la documentation officielle.

 

Bonne compilation !