2012-08-30 23 views
30

Tengo un gran proceso que se compone de tareas (alrededor de 600), y he creado una figura para ver el orden en que se inician y el tiempo que toman. Para hacer esto, utilicé matplotlib y un barh.matplotlib - aumentar la resolución para ver detalles

La cifra está bien (mi primera éxito matplotlib!), Pero:

  • Me gustaría ver los detalles y hacer zoom en la imagen cuando se exporta (como PNG, por ejemplo), ya que la opción de zoom permite cuando matplotlib muestra el resultado con el comando show()
  • las leyendas de los eje y están demasiado cerca y es ilegible

probé para aumentar la resolución como se ha dicho en this other SO post, esto es mejor, pero los detalles no son precisos suficiente. Aquí están mis resultados hasta ahora:

  • resultado completo

full

  • zoom con matplotlib

zoom

¿Usted sabe cómo podría mejorar la legibilidad ? Muchas gracias (de lo contrario, todos mis esfuerzos serían inútiles, me temo ...)

PD: Estoy usando matplotlib 1.1.1 y python 2.7.

+0

La resolución se ve bien. Supongo que tu punto es la legibilidad en los ejes? Intente disminuir el tamaño de fuente para las etiquetas de eje. Si hay algo más, tendrías que aclarar sobre lo que quieres. Para una mejor resolución, exporte a postscript o PDF; estos formatos se basan en vectores, y normalmente conservan la resolución completa. Solo tenga en cuenta que dichos archivos pueden crecer de esta manera (y tardar un poco en generarse). Si desea un PNG, simplemente conviértalo en una figura enorme con una resolución normal (ppp); es inherente a un tipo de imagen rasterizada como PNG que no se puede ampliar sin fin. – Evert

+0

Acabo de probar algo más: agregar anotaciones en lugar de etiquetar en el eje.Pero el mismo problema persiste: dado que tengo más de 600 valores, incluso el tamaño de fuente 'xx-small' no es suficiente. Lo que realmente me gustaría es tener el tamaño de texto de la anotación de la misma altura que los elementos del gráfico, ¿es esto posible? Entonces solo generaría con una resolución muy grande, para poder acercarme tanto como quisiera. – Emmanuel

+2

¿Qué pasa si haces una figura muy grande? Eso funcionaría si el tamaño de la fuente no se escala (ya que normalmente se define en puntos), pero las barras se escalan con el tamaño de la figura. Por supuesto, tal cifra es un poco incómoda para "arrastrar" o imprimir, pero en ese punto, puede volver a escalarla. O bien, para una figura de tamaño normal, intente utilizar un tamaño de fuente de 1 (entero) en lugar de una cadena. Eso funcionó para mí. – Evert

Respuesta

14

Sólo para que conste, voy a poner la sugerencia hecho en mi segundo comentario aquí como una posible respuesta también. Esto no siempre puede funcionar, pero una prueba de muestra buenos resultados:

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 

Parecería incluso fontsizes fraccionarias (por ejemplo fontsize=0.1) obras. Su millaje puede variar: lo he probado solo con el backend PDF, no con el EPS.

También: He omitido la configuración de PPP. Al imprimir esto en una impresora de alta resolución, puede necesitarlo de nuevo. Por otra parte, no debería hacerlo, ya que es probable que se trate de una configuración de impresora: cómo la impresora rasteriza su imagen de PDF (vectorial). Simplemente no sé si este tipo de "pistas" pueden codificarse en postscript/PDF.

31

Logré hacerlo, en el consejo de Evert, usando una resolución muy grande con una fuente muy pequeña. Estos son los pasos más 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', ...) 
Cuestiones relacionadas