2012-04-12 15 views
6

No puedo encontrar a nadie más con este problema. En matplotlib, puede ver sus gráficos utilizando show() o savefig(). Estos generan imágenes ligeramente diferentes; en mi caso, la imagen de savefig() es más fea y más difícil de entender. Necesito hacer la vida más fácil para mi examinador, así que ...matplotlib, savefig: configuración de PPP se ignora

Encontré algunos temas que sugerían que establezca el tamaño de DPI para que coincida con el de show(). He tratado:

-> Configuración savefig.dpi directamente con matplotlib.rcParams [ 'savefig.dpi'] = 80.

-> Configuración savefig.dpi directamente en ~/.matplotlib/matplotlibrc.

-> Mover mi archivo rc a CWD.

-> Por último, el uso de savefig ('image.pdf', dpi = 80)

puedo comprobar que el atributo de hecho se está establecido; pero parece que el ajuste lo guarda savefig(). ¿Alguien puede ayudarme con esto?

(simplificado) Código:

plt.bar(ind, functimes, yerr=stddev, bottom=0, width=barWidth, align='center', color='b') 

ax = plt.gca() 
ax.legend(barRcts, barLegend) 
plt.title("Function Call Overhead") 
plt.xlabel("Function ID") 
plt.ylabel("Execution Time [us]") 

plt.xticks(ind, funcNames) 
figtest.autofmt_xdate() 

plt.savefig(out_file, dpi=80, format='pdf') 
+5

'matplotlib' guarda archivos' pdf' en formato vectorial. A menos que tenga imágenes de mapas de bits, DPI no tiene sentido en una imagen vectorial ya que son independientes de la resolución. – Avaris

+1

Ajá, lo entiendo. Por lo tanto, no hay forma de guardar imágenes en pdf con savefig() para que sean idénticas a las que puede guardar (manualmente) con show()? – memstick

+5

Deben ser idénticos. La única diferencia podría ser si cambia el tamaño de la figura antes de guardarla. Pero también puedes establecer el tamaño de tu figura ('figura ((ancho, alto))') y 'savefig' usará eso. – Avaris

Respuesta

3

ahorro PDF utiliza la configuración de PPP para la resolución de la imagen dentro del PDF, no para cualquier resolución de línea/polígono (que no tiene sentido en un formato vectorial).

Si está contento con la salida en la pantalla, y no necesita tener un gráfico escalable, guardar como png probablemente esté bien.

+0

Pero tenga en cuenta que si ha utilizado 'contourf' (por ejemplo), obtiene una imagen ráster dentro de su pdf/svg, por lo que los dpi son significativos de nuevo. –

+0

@ChrisH - No estoy de acuerdo. Contourf produce una salida de vector no raster. Sin embargo, imshow produce una imagen para que (de la memoria) exista una imagen de dpi para ayudar. HTH – pelson

+1

resulta que tienes razón, según mis 5.5 MB .svg que ralentiza inkscape a un rastreo absoluto. Luego, la configuración de dpi ayuda a obtener el ancho de línea correcto para ejes y líneas superpuestas. Me di cuenta de esto hace un tiempo, pero olvidé iniciar sesión y actualizar. –

Cuestiones relacionadas