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 :
- le nom du fichier texte (ou chemin vers le fichier)
- Nom de la première variable à enregistrer
- Nom de la colonne correspondant à cette première variable
- Nom de la deuxième variable
- 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.