web-dev-qa-db-fra.com

enregistrement d'images dans python avec une qualité très élevée

Comment puis-je enregistrer des parcelles python avec une qualité très élevée?

C'est-à-dire que lorsque je continue à zoomer sur l'objet enregistré dans un fichier pdf, il n'y a pas de flou?

En outre, quel serait le meilleur mode pour le sauvegarder?

png, eps? Ou un autre? Je ne peux pas faire pdf car il y a un nombre caché qui se passe, avec la compilation Latexmk.

87
dustin

Si vous utilisez matplotlib et essayez d’obtenir de bons chiffres dans un document au latex, enregistrez-les au format eps. En particulier, 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 fonctionnaient mieux et que le paramètre dpi leur permettait de bien paraître dans un document.

MISE À JOUR:

Pour spécifier l’orientation de la figure avant de sauvegarder, il suffit d’appeler le texte suivant avant l’appel plt.savefig, mais après la création du tracé (en supposant que vous avez tracé à l’aide d’un axe nommé ax):

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

elevation_angle est un nombre (en degrés) spécifiant l'angle polaire (en bas de l'axe z vertical) 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 pivoter et en regardant les valeurs actuelles des angles apparaissent vers le bas de la fenêtre, juste en dessous du tracé réel. Gardez à l'esprit que les positions x, y, z apparaissent par défaut, mais sont remplacées par les deux angles lorsque vous commencez à cliquer + glisser + faire pivoter l'image.

128
spencerlyon2

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

.eps a mis tout mon texte en gras et a supprimé la transparence. .svg m'a donné des images haute résolution qui ressemblaient en réalité à 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é une résolution de 1200 ppp, car de nombreux journaux scientifiques exigent des images en 1200/600/300 ppp, en fonction de leur contenu. Convertissez au format dpi souhaité et formatez-le dans GiMP ou Inkscape.

EDIT: Évidemment, le dpi n'a pas d'importance puisque les fichiers .svg sont des graphiques vectoriels et ont une "résolution infinie".

52
grofte

Ok, j’ai trouvé la réponse de spencerlyon2 efficace, mais au cas où quelqu'un se trouverait ne sachant pas quoi faire avec cette ligne, je devais le faire de cette façon:

beingsaved = plt.figure()

# some scatters
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)
4
Jonatán Iván

Si vous travaillez avec des tracés seaborn, au lieu de matplotlib, vous pouvez enregistrer une image .png comme ceci:

Supposons que vous ayez un objet matrix (soit pandas, soit numpy), et que vous souhaitiez prendre une carte de chaleur:

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. D'autres codes autour de stackoverflow ne fonctionnaient 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 ensuite, je trace la sortie dans la console, à partir de laquelle je peux copier-coller où je veux. (Seaborn étant construit sur matplotlib, il n'y aura pas de problème.)

3
Leevo