Enregistrer une image Sagemath
Bonjour, j'aimerais enregistrer une image en 3d produite par sagemath si possible en .svg ou .eps mais je n'y arrive pas, pourtant les manuels stipulent que c'est possible (en utilisant la commande save) et pouvoir en controler la taille. J'aimerais connaitre également à l'avance où va être enregistrée l'image, car en .png elle s'enregistre aléatoirement en fichier temporaire ou dans mes documents.
Je vous remercie d'avance
Je vous remercie d'avance
Réponses
-
Imagine que tu aies produit un objet G de type Graphics, par exemple "G=plot(sin)". Pour le sauver dans un répertoire fixé, il faut repérer le chemin absolu du répertoire, disons "/home/toto/Images/Sage", et invoquer :
G.save('/home/toto/Images/Sage/ma_belle_image.svg', figsize=8)
Tu peux mettre (en option) de "save" les options que tu mettrais pour "show" (par exemple, figsize, aspect_ratio, ymin, etc.).
Si G est un graphique 3d, on peut assurément le sauver en png mais ça ne me semble pas clair qu'on puisse en faire du svg ou de l'eps directement, en tout cas je ne sais pas faire. -
Merci, j'ai essayé mais ca ne marche toujours pas, il donne un message d'erreur. Voilà ce que je tape:
u,v=var('u,v') C=parametric_plot3d([(5+1.5*cos(v)),0,1.5*sin(v)],(v,0,2*pi), color='red') T=parametric_plot3d([(5+1.5*cos(v))*cos(u),(5+1.5*cos(v))*sin(u),1.5*sin(v)],(u,0,2*pi),(v,0,2*pi),frame=False,opacity=0.4,color='grey',aspect_ratio=[1,1,1]) G=C+T G.show G.save('C:\Users\Bastien\Documents\rapport tipe\tore.png',figsize=30)
Mais voilà ce qu'il retourne:RuntimeError Traceback (most recent call last) <ipython-input-3-eb58d1d1c2c9> in <module>() 4 G=C+T 5 G.show ----> 6 G.save('C:\Users\Bastien\Documents\rapport tipe\tore.png',figsize=Integer(30)) /opt/sagemath-8.5/local/lib/python2.7/site-packages/sage/plot/plot3d/base.pyx in sage.plot.plot3d.base.Graphics3d.save (build/cythonized/sage/plot/plot3d/base.c:20917)() 1619 elif ext in ['.bmp', '.png', '.gif', '.ppm', '.tiff', '.tif', 1620 '.jpg', '.jpeg']: -> 1621 self.save_image(filename, **kwds) 1622 elif filename.endswith('.spt.zip'): 1623 scene = self._rich_repr_jmol(**kwds) /opt/sagemath-8.5/local/lib/python2.7/site-packages/sage/plot/plot3d/base.pyx in sage.plot.plot3d.base.Graphics3d.save_image (build/cythonized/sage/plot/plot3d/base.c:20475)() 1548 raise ValueError('unknown image file type: {0}'.format(ext)) 1549 if ext == '.png': -> 1550 self._save_image_png(filename, **kwds) 1551 else: 1552 png = tmp_filename(ext='.png') /opt/sagemath-8.5/local/lib/python2.7/site-packages/sage/plot/plot3d/base.pyx in sage.plot.plot3d.base.Graphics3d._save_image_png (build/cythonized/sage/plot/plot3d/base.c:20112)() 1510 render.png.save_as(filename) 1511 elif viewer == 'jmol': -> 1512 scene = self._rich_repr_jmol(**opts) 1513 scene.preview_png.save_as(filename) 1514 else: /opt/sagemath-8.5/local/lib/python2.7/site-packages/sage/plot/plot3d/base.pyx in sage.plot.plot3d.base.Graphics3d._rich_repr_jmol (build/cythonized/sage/plot/plot3d/base.c:7338)() 274 275 script = '''set defaultdirectory "{0}"\nscript SCRIPT\n'''.format(scene_native) --> 276 jdata.export_image(targetfile=preview_png, datafile=script, 277 image_type="PNG", 278 figsize=opts['figsize'][0]) /opt/sagemath-8.5/local/lib/python2.7/site-packages/sage/interfaces/jmoldata.pyc in export_image(self, targetfile, datafile, datafile_cmd, image_type, figsize, **kwds) 179 stdout=jout, stderr=jout, env=env) 180 if not os.path.isfile(targetfile): --> 181 raise RuntimeError("Jmol failed to create file %s, see %s for details"%(repr(targetfile), repr(scratchout))) 182 os.unlink(scratchout) RuntimeError: Jmol failed to create file '/home/sage/.sage/temp/DESKTOP-KFC101C/5372/dir_TMw8C0/preview.png', see '/home/sage/.sage/temp/DESKTOP-KFC101C/5372/tmp_AoopDh.txt' for details
Je sais pas pourquoi, pourtant je recopie les syntaxes données sur le net... -
Il y a deux petites choses qui me surprennent :
- la ligne "G.show" ne sert à rien, elle renvoie "<built-in method show of Graphics3dGroup object at 0x7fc8d01045f0>
" ; pour ouvrir la fenêtre, il faudrait invoquer "G.show()" mais de toute façon, ça ne sert pas pour une sauvegarde directe ; - problème plus plausiible : l'espace dans le nom du répertoire "rapport tipe" ; pour éviter de tenter le diable, il vaudrait mieux renommer ce répertoire en "rapport_tipe" ou "rapportTipe" ou n'importe quoi mais sans espace (une autre chose à essayer serait de taper un \ avant l'espace mais comme principe, ce n'est pas une bonne idée de mettre des espaces dans le nom des fichiers ou des répertoires).
NB : À vrai dire, pour une figure dans l'espace, je trouve en général plus efficace de lancer jmol avec G.show(), de zoomer et faire tourner la figure et d'exporter à partir de là. Enfin, à part quand il s'agit de faire une animation.
PS : Ci-joint ta figure sauvée par "G.save('/home/toto/Bureau/tore.png')". - la ligne "G.show" ne sert à rien, elle renvoie "<built-in method show of Graphics3dGroup object at 0x7fc8d01045f0>
-
Malheureusement ca ne règle pas le problème... Je pense que je vais faire une capture d'écran. Merci des conseils en tout cas!
-
Bon, désolé. Une dernière tentative ?
G.save('/home/toto/Bureau/tore.png', viewer='tachyon')
Sinon, on peut faire un peu mieux qu'une copie d'écran depuis Jmol : "Fichier -> Exporter -> Exporter une image..." -
Je pense avoir compris: premièrement le chemin devait être un chemin dans le notebook et pas dans mon ordinateur, ensuite l'ordi ne tolère pas un figsize plus grand que 20 apparemment. Quant à tachyon, il ne prenait pas en charge la texture du tore.
J'utilise le notebook jupyter pour afficher les images car dans la console de Sagemath, lorsqu'elle ouvre Jmol pour afficher l'image, il n'y a...qu'un fond noir. Qu'entends-tu par "Fichier"=>"Exporter=>exporter une image? -
En travaillant depuis un terminal, Jmol lance une fenêtre au-dessus de laquelle il y a un menu "Fichier" etc. Depuis le notebook Jupyter, on s'attendrait à ce qu'un clic droit offre le même genre d'option. En pratique, je n'arrive pas à développer le sous-menu "File". Sic transit gloria mundi. En revanche, j'obtiens un message d'erreur comparable au tien avec une taille de figure de 30, ce que je n'avais pas anticipé. En revanche, j'arrive bien à enregistrer depuis Jupyter avec le chemin absolu – mais il pourrait y avoir une différence entre Windows et Linux de ce point de vue. Eh bien, désolé d'être si inutile !
-
Mais tu m'as bien aidé ! Moi non plus je ne peux dérouler le menu "file" sous jupyter.
Hélas, je trouve que la documentation sur Sagemath est assez maigre et qu'il faut savoir bidouiller en informatique pour s'y retrouver.
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres