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 \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 :

https ://gist.github.com/DorianDepriester/40758fffc8b1211a02e7

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.