Archive du forum du MOOC Recherche Reproductible Session 2

Fonction return dans python

thomasbb

Bonjour,

Dans le manuel d’org-mode, j’ai trouvé ce bout de code :

#+begin_src python :session :results file
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(3,2))
plt.plot([1,3,2])
fig.tight_layout()
plt.savefig('images/myfig.pdf')
'images/myfig.pdf' # return this to org-mode
#+end_src

La figure est enregistrée sur le disque, mais le résultat reste vide. Est-ce qu’il faut un paramétrage supplémentaire ?

Apparemment, la commande

return

s’utilise différemment selon que l’on est en mode session ou pas.

mgdondon

Bonjour,

Je pense que c’est parce que Emacs n’affiche pas le format pdf. Vous pouvez essayer avec le format png.

Personnellement j’ai modifié le fichier init.el en remplaçant
(org-babel-temp-file \"figure\" \".png\")
par
\"D:/temp/figure.png\"

De la sorte, le raccourci <PP produit le code suivant :

#+begin_src python :results file :session :var matplot_lib_filename="D:/temp/figure.png" :exports both
import matplotlib.pyplot as plt

import numpy
x=numpy.linspace(-15,15)
plt.figure(figsize=(10,5))
plt.plot(x,numpy.cos(x)/x)
plt.tight_layout()

plt.savefig(matplot_lib_filename)
matplot_lib_filename
#+end_src

Cordialement,

thomasbb

La compilation ne fait plus avec .png :

Traceback (most recent call last):
File "<stdin>", line 13, in <module>
File "<stdin>", line 10, in main
File "/usr/lib/python3.7/site-packages/matplotlib/pyplot.py", line 689, in savefig
res = fig.savefig(*args, **kwargs)
File "/usr/lib/python3.7/site-packages/matplotlib/figure.py", line 2094, in savefig
self.canvas.print_figure(fname, **kwargs)
File "/usr/lib/python3.7/site-packages/matplotlib/backend_bases.py", line 2075, in print_figure **kwargs)
File "/usr/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py", line 521, in print_png
cbook.open_file_cm(filename_or_obj, "wb") as fh:
File "/usr/lib/python3.7/contextlib.py", line 112, in __enter__
return next(self.gen)
File "/usr/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 407, in open_file_cm 
fh, opened = to_filehandle(path_or_file, mode, True, encoding)
File "/usr/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 392, in to_filehandle
fh = open(fname, flag, encoding=encoding)
FileNotFoundError: [Errno 2] No such file or directory: 'images/myfig.png'
mgdondon

Je vous conseille de vérifier le chemin du dossier images.

Capture

Cordialement,

thomasbb

Effectivement, je n’avais recréé le répertoire dans le dossier /journal… Merci !