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}; |