Fusionner deux fichiers de données pour PGFPlots

Dans cet article, je montre comment tracer des graphiques avec PGFPlots depuis deux fichiers de points distincts.

Problématique

Mettons que vous ayez dans un fichier Values.txt un ensemble de valeurs pour une certaine quantité et dans un autre fichier Time.txt les différentes dates correspondantes.

Comment faire pour tracer les valeurs en fonction du temps ?

Solution 1 : Copie de colonnes dans PGFPlots

A l’aide du package pgfplotstable, il est possible de créer des colonnes « virtuelles » et de les utiliser dans n’importe quelle commande \addplot :

\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
 
\pgfplotstableset{
	create on use/values/.style={create col/copy column from table={Value.txt}{0}}
}
 
\begin{document}
	\begin{tikzpicture}
		\begin{axis}
			\addplot table[y=values]{Time.txt};
		\end{axis}
	\end{tikzpicture}
\end{document}

Le code précédent crée un colonne virtuelle appelée values depuis le fichier Values.txt. Lors de l’appel de la commande \addplot, le fait de spécifier y=values indique à PGFPlots d’utiliser cette colonne virtuelle pour les coordonnées en Y. Les coordonnées en X sont naturellement lues dans le fichier Time.txt.

Dans mon exemple, je fais l’hypothèse qu’il n’existe qu’une colonne par fichier. Si le fichier Value.txt comporte plusieurs colonnes, il suffit de préciser l’indice de celle que l’on souhaite conserver. Exemple pour la quatrième colonne :

\pgfplotstableset{
	create on use/values/.style={create col/copy column from table={Value.txt}{3}}
}

Si les colonnes sont nommées, il est possible d’utiliser leurs noms au lieu des indices.

Solution 2 : Fusion de fichiers texte (Linux)

A ma connaissance, la solution précédente est la plus simple à mettre en oeuvre. Si toutefois vous la trouvez trop lourde en terme de compacité de code, il n’est pas trop tard pour fusionner les fichiers textes, et utiliser les commandes habituelles.

Pour ce faire, les linuxiens seront contents de découvrir la commande paste, qui sert justement à afficher côte à côte le contenu de deux fichiers texte. Ainsi, il suffit d’exporter le rendu dans un nouveau fichier :

paste Time.txt Values.txt > Data.txt

et d’utiliser ledit fichier pour tracer les données :

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