web-dev-qa-db-fra.com

matplotlib - augmentez la résolution pour voir les détails

J'ai un gros processus qui est composé de tâches (environ 600), et j'ai créé une figure pour regarder l'ordre avec lequel elles sont lancées et le temps qu'elles prennent. Pour ce faire, j'ai utilisé du matplotlib et un barh.

Le chiffre est correct (mon 1er succès matplotlib!), Mais:

  • Je voudrais voir les détails et zoomer sur l'image lors de l'exportation (comme PNG, par exemple), car l'option de zoom permet lorsque matplotlib affiche le résultat avec la commande show()
  • les légendes de l'axe Y sont trop proches et illisibles

J'ai essayé d'augmenter la résolution comme indiqué dans cet autre SO post , c'est mieux mais les détails ne sont pas assez précis. Voici mes résultats jusqu'à présent:

  • résultat complet

full

  • zoom avec matplotlib

zoom

Savez-vous comment améliorer la lisibilité? Merci beaucoup (sinon, tous mes efforts seraient inutiles, je le crains ...)

PS: j'utilise matplotlib 1.1.1 et python 2.7.

36
Emmanuel

Juste pour le compte rendu, je mettrai ici la suggestion faite dans mon deuxième commentaire comme réponse possible. Cela ne fonctionne pas toujours, mais un test montre de bons résultats:

import pylab as pl
pl.figure(figsize=(7, 7))  # Don't create a humongous figure
pl.annotate(..., fontsize=1, ...)   # probably need the annotate line *before* savefig
pl.savefig('test.pdf', format='pdf')   # no need for DPI setting, assuming the fonts and figures are all vector based

Il semblerait même des tailles de police fractionnaires (par exemple fontsize=0.1) travaux. Votre kilométrage peut varier: je l'ai testé uniquement avec le backend PDF, pas l'EPS.

Aussi: J'ai omis le paramètre DPI. Lorsque vous imprimez ceci sur une imprimante haute résolution, vous peut en avez besoin à nouveau. Là encore, vous ne devriez pas, car il s'agit probablement d'un paramètre d'imprimante à la place: comment l'imprimante pixellise votre (vecteur) PDF image. Je ne sais tout simplement pas si ce genre de "conseils" peut être codé en postscript/PDF.

21
user707650

J'ai réussi à le faire, sur les conseils de Evert , en utilisant une très grande résolution avec une très petite police. Voici les étapes les plus importantes:

import pylab as pl
pl.figure(figsize=(70, 70)) # This increases resolution
pl.savefig('test.eps', format='eps', dpi=900) # This does, too
pl.annotate(..., fontsize='xx-small', ...)
39
Emmanuel