Export de données Matlab pour PGFPlots

Nombreuses sont les personnes m’ayant demandé comment mettre en forme facilement des données MATLAB pour tracer ces données avec TikZ/PGFplots. Je vais donc vous proposer deux façons de faire : une simple mais spécifique à chaque cas, et une autre plus complexe mais beaucoup plus flexible.

Code (vraiment) minimal

Supposons que nous voulions enregistrer les vecteurs x, y1 et y2 dans le fichier “resultat.txt”, et ajouter pour chacun d’eux un nom de colonne : “abs”, “data_exp”, “data_simu” respectivement. Le code suivant fera parfaitement l’affaire :

M=[x,y1,y2];	 % Les vecteurs doivent être en colonne
filename='resultat.txt';
 
fileID = fopen(filename,'w');	% Enregistrement de l'entête
	 fprintf(fileID,'%s\t%s\t%s\n','abs','data_exp','data_simu');
fclose(fileID);
 
dlmwrite('filename',M,'-append','delimiter','\t')	% Ajout à la fin du fichier

Par la suite, vous pourrez ainsi tracer vos courbes dans \LaTeX en faisant simplement appel au fichier et aux colonnes qui vont bien. Ex :

\begin{tikzpicture}
	 \begin{axis}
		\addplot+[mark=none] table[x=abs, y=data_exp] {resultat.txt};
		\addplot+[mark=none] table[x=abs, y=data_simu] {resultat.txt};
	\end{axis}
\end{tikzpicture}

Pour rappel, voir ici pour plus de détails sur PGFPlots.

Utilisation d’un fonction

Si on veut rendre le code plus flexible, c’est-à-dire extensible à autant de variables que souhaité, et mettre ça sous forme de fonction, voici une solution possible :

Les arguments de la fonction sont donc :

  1. le nom du fichier texte (ou chemin vers le fichier)
  2. Nom de la première variable à enregistrer
  3. Nom de la colonne correspondant à cette première variable
  4. Nom de la deuxième variable
  5. Nom de la colonne correspondant à cette seconde variable
    etc.

Pour obtenir le même résultat que précédemment, il suffit alors d’exécuter la commande suivante :

exportPGFPlots('resultat.txt',x,'abs',y1,'data_exp',y2,'data_simu')

Pour aller plus loin

Si vous êtes un fou furieux des graphiques de MATLAB, mais que vous voulez tout de même les rendre “TikZ friendly”, peut-être serez-vous intéressé par Matlab2tikz.