184 votes

Enregistrement d'images en Python avec une très haute qualité

Comment puis-je sauvegarder des parcelles Python en très haute qualité ?

En d'autres termes, lorsque je continue à zoomer sur l'objet enregistré dans un fichier PDF, pourquoi n'y a-t-il pas de flou ?

En outre, quel serait le meilleur mode pour l'enregistrer ?

png , eps ? Ou un autre ? Je ne peux pas faire pdf parce qu'il y a un nombre caché de choses qui se produisent et qui dérangent Latexmk compilation.

225voto

spencerlyon2 Points 5522

Si vous utilisez Matplotlib et essayent d'obtenir de bons chiffres dans un LaTeX sauvegarder en tant que document EPS . Plus précisément, essayez quelque chose comme ceci après avoir exécuté les commandes pour tracer l'image :

plt.savefig('destination_path.eps', format='eps')

J'ai constaté que les fichiers EPS fonctionnent mieux et que les dpi Le paramètre est ce qui les met en valeur dans un document.

Pour spécifier l'orientation de la figure avant de l'enregistrer, il suffit d'appeler la fonction suivante avant la fonction plt.savefig mais après avoir créé le tracé (en supposant que vous avez tracé en utilisant un axe avec le nom ax ):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle)

elevation_angle est un nombre (en degrés) spécifiant l'angle polaire (vers le bas par rapport à l'axe vertical z) et le azimuthal_angle spécifie l'angle azimutal (autour de l'axe z).

Je trouve qu'il est plus facile de déterminer ces valeurs en traçant d'abord l'image, puis en la faisant tourner et en regardant les valeurs actuelles des angles apparaître vers le bas de la fenêtre, juste en dessous du tracé actuel. Gardez à l'esprit que les positions x, y, z, apparaissent par défaut, mais qu'elles sont remplacées par les deux angles lorsque vous commencez à cliquer+drag+rotationner l'image.

119voto

grofte Points 618

Juste pour ajouter mes résultats, en utilisant également Matplotlib.

.eps a mis tout mon texte en gras et a supprimé la transparence. Le format .svg m'a permis d'obtenir des images en haute résolution qui ressemblaient réellement à mon graphique.

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)

J'ai utilisé 1200 ppp parce que beaucoup de revues scientifiques exigent des images en 1200 / 600 / 300 ppp, selon le sujet de l'image. Convertissez en ppp et en format souhaités dans GIMP o Inkscape .

Il est évident que le nombre de ppp n'a pas d'importance puisque les .svg sont des graphiques vectoriels et ont une "résolution infinie".

12voto

Jonatán Iván Points 101

Ok, j'ai trouvé La réponse de spencerlyon2 de travail. Cependant, au cas où quelqu'un se retrouverait à ne pas savoir quoi faire avec cette seule ligne, j'ai dû procéder de cette façon :

beingsaved = plt.figure()

# Some scatter plots
plt.scatter(X_1_x, X_1_y)
plt.scatter(X_2_x, X_2_y)

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000)

11voto

Eamonn Kenny Points 11

Vous pouvez enregistrer sur une figure qui est 1920x1080 (ou 1080p) en utilisant :

fig = plt.figure(figsize=(19.20,10.80))

Vous pouvez également aller beaucoup plus haut ou plus bas. Les solutions ci-dessus fonctionnent bien pour l'impression, mais de nos jours, vous souhaitez que l'image créée soit transférée dans un PNG/JPG ou apparaisse dans un format d'écran large.

9voto

Leevo Points 1297

Si vous travaillez avec seaborn au lieu de Matplotlib, vous pouvez enregistrer une image .png comme ceci :

Supposons que vous ayez un matrix (soit Pandas o NumPy ), et vous souhaitez réaliser une carte thermique :

import seaborn as sb

image = sb.heatmap(matrix)   # This gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")   # This saves it

Ce code est compatible avec la dernière version de Seaborn. Les autres codes autour de Stack Overflow ne fonctionnent que pour les versions précédentes.

Une autre façon que j'aime est la suivante. Je règle la taille de l'image suivante comme suit :

plt.subplots(figsize=(15,15))

Et plus tard, je trace la sortie dans la console, d'où je peux la copier-coller où je veux. (Comme Seaborn est construit au-dessus de Matplotlib, il n'y aura aucun problème).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X