tutorial pyplot español matplotlib ipython-notebook scikit-image

matplotlib - pyplot - Las imágenes en línea tienen baja calidad



plot() python (4)

Estoy cargando un archivo TIF con scikit-image y lo muestro en línea en un cuaderno ipython (versión 2.2.0). Esto funciona, sin embargo, la imagen es bastante pequeña cuando se muestra por primera vez, y cuando la redimensiono usando el controlador que se puede arrastrar en la parte inferior derecha de la imagen, simplemente vuelve a escalar la imagen mientras mantiene la resolución del original, por lo que es muy borrosa cuando se amplía. . Es básicamente como si ipython está convirtiendo mi imagen en una miniatura sobre la marcha.

He intentado usar también plt.imshow() de plt.imshow() , que tiene exactamente el mismo resultado. Estoy empezando el cuaderno con ipython notebook --pylab inline .

from skimage import io import matplotlib.pyplot as plt image_stack = io.MultiImage("my_image.tif") image = image_stack[0] # it''s a multi-page TIF, this gets the first image in the stack io.imshow(image) # or plt.imshow(image) io.show() # or plt.show()


De acuerdo con https://www.reddit.com/r/IPython/comments/1kg9e2/ipython_tip_for_getting_better_quality_inline/

También podrías ejecutar esta magia en tu celular:

%config InlineBackend.figure_format = ''svg''

La calidad de impresión se verá significativamente mejor. También puede cambiar svg a retina , para usar PNG de alta resolución (no tan agradable). Sin embargo, tenga en cuenta que si su imagen se vuelve demasiado complicada, la imagen svg tendrá un tamaño mucho mayor que el de la imagen de la retina .


La resolución de las figuras de matplotlib en línea se reduce un poco en comparación con lo que vería en una ventana GUI o en una imagen guardada, probablemente para ahorrar espacio en el archivo del cuaderno. Para cambiarlo, puedes hacer:

import matplotlib as mpl mpl.rc("savefig", dpi=dpi)

Donde dpi es un número que controlará el tamaño / resolución de los gráficos en línea. Creo que el valor predeterminado en línea es 80, y el valor predeterminado en otros lugares con matplotlib es 100.

La razón por la que la escala de la gráfica resultante al arrastrar el manejador no funciona es que la gráfica se representa como un png, por lo que la escala se amplía pero no cambia la resolución intrínseca.


Para cambiar la resolución de la figura "% matplotlib en línea" en el portátil, haga lo siguiente:

import matplotlib as mpl mpl.rcParams[''figure.dpi'']= dpi

Recomiendo establecer el ppp en algún lugar entre 150 y 300 si va a download/print la notebook. Asegúrese de que %matplotlib inline ejecute antes de mpl.rcParams[''figure.dpi'']= dpi contrario, el comando magic restablece el dpi a su valor predeterminado (acredita a @fabioedoardoluigialberto por darse cuenta de esto).

El siguiente snipppet solo cambia los ppp de las cifras guardadas a través del método savefig, no las cifras generadas en línea.

import matplotlib as mpl mpl.rc("savefig", dpi=dpi)


Suponiendo que esto es lo mismo que sucede con el cuaderno iPython (con% matplotlib en línea) cuando va a arrastrar y cambiar el tamaño de la imagen, la solución es bastante simple.

Si solo creas una figura con un tamaño predeterminado diferente, entonces la resolución también aumenta con el tamaño predeterminado ( Cambiar resolución de imshow en ipython ). Por ejemplo:

fig = plt.figure(figsize = (10,10)) ax = fig.add_subplot(111) ax.imshow(array)

Algo como esto debería aumentar la resolución de lo que intentas trazar. Esto pareció funcionar para mí con su código:

from skimage import io import matplotlib.pyplot as plt %matplotlib inline image_stack = io.MultiImage("my_image.tif") image = image_stack[0] fig = plt.figure(figsize= (20,20)) #create an empty figure to plot into with 20x20 size io.imshow(image) io.show()