subplots_adjust subplots plots and python matplotlib

python - and - subplots_adjust



Reduce los márgenes izquierdo y derecho en la trama matplotlib (8)

El problema con matplotlibs subplots_adjust es que los valores que ingresas son relativos a los xey la figura de la figura. Este ejemplo es para dimensionar correctamente la impresión de un pdf:

Para eso, recalculo el espaciado relativo a valores absolutos como este:

pyplot.subplots_adjust(left = (5/25.4)/figure.xsize, bottom = (4/25.4)/figure.ysize, right = 1 - (1/25.4)/figure.xsize, top = 1 - (3/25.4)/figure.ysize)

para una figura de pulgadas ''figure.xsize'' en x-dimension y ''figure.ysize'' pulgadas en y-dimension. Entonces, toda la figura tiene un margen izquierdo de 5 mm, un margen inferior de 4 mm, una derecha de 1 mm y una parte superior de 3 mm dentro de las etiquetas. La conversión de (x / 25.4) se hace porque necesitaba convertir mm a pulgadas.

Tenga en cuenta que el tamaño del gráfico puro de x será "figure.xsize - left margin - right margin" y el tamaño puro del gráfico de y será "figure.ysize - bottom margin - top margin" en pulgadas

Otros sniplets (no estoy seguro de estos, solo quería proporcionar los otros parámetros)

pyplot.figure(figsize = figureSize, dpi = None)

y

pyplot.savefig("outputname.eps", dpi = 100)

Estoy luchando para lidiar con los márgenes de mi trama en matplotlib. He utilizado el siguiente código para producir mi gráfico:

plt.imshow(g) c = plt.colorbar() c.set_label("Number of Slabs") plt.savefig("OutputToUse.png")

Sin embargo, obtengo una figura de salida con mucho espacio en blanco a cada lado de la trama. Busqué en google y leí la documentación de matplotlib, pero parece que no puedo encontrar cómo reducir esto.


Para mí, las respuestas anteriores no funcionaron con matplotlib.__version__ = 1.4.3 en Win7. Entonces, si solo estamos interesados ​​en la imagen en sí (es decir, si no necesitamos anotaciones, ejes, ticks, título, ylabel, etc.), entonces es mejor simplemente guardar la matriz numpy como imagen en lugar de savefig .

from pylab import * ax = subplot(111) ax.imshow(some_image_numpyarray) imsave(''test.tif'', some_image_numpyarray) # or, if the image came from tiff or png etc RGBbuffer = ax.get_images()[0].get_array() imsave(''test.tif'', RGBbuffer)

Además, usando las funciones de dibujo de opencv (cv2.line, cv2.polylines), podemos hacer algunos dibujos directamente en la matriz numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html


Puede ajustar el espaciado alrededor de las figuras de matplotlib usando la función subplots_adjust ():

import matplotlib.pyplot as plt plt.plot(whatever) plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)

Esto funcionará tanto para la figura en la pantalla como para guardar en un archivo, y es la función correcta para llamar incluso si no tiene múltiples trazados en la figura.

Los números son fracciones de las dimensiones de la figura y deberán ajustarse para permitir las etiquetas de las figuras.


Simplemente use "ax = fig.add_axes ([left, bottom, width, height])" si desea un control exacto del diseño de la figura. p.ej.

left = 0.05 bottom = 0.05 width = 0.9 height = 0.9 ax = fig.add_axes([left, bottom, width, height])


Todo lo que necesitas es

plt.tight_layout()

antes de su salida.

Además de reducir los márgenes, esto también agrupa estrechamente el espacio entre las subtramas:

x = [1,2,3] y = [1,4,9] import matplotlib.pyplot as plt fig = plt.figure() subplot1 = fig.add_subplot(121) subplot1.plot(x,y) subplot2 = fig.add_subplot(122) subplot2.plot(y,x) fig.tight_layout() plt.show()


Una forma de hacer esto automáticamente es bbox_inches=''tight'' a plt.savefig .

P.ej

import matplotlib.pyplot as plt import numpy as np data = np.arange(3000).reshape((100,30)) plt.imshow(data) plt.savefig(''test.png'', bbox_inches=''tight'')

Otra forma es usar fig.tight_layout()

import matplotlib.pyplot as plt import numpy as np xs = np.linspace(0, 1, 20); ys = np.sin(xs) fig = plt.figure() axes = fig.add_subplot(1,1,1) axes.plot(xs, ys) # This should be called after all axes have been added fig.tight_layout() fig.savefig(''test.png'')


inspirado en la respuesta de Sammys arriba:

margins = { # vvv margin in inches "left" : 1.5 / figsize[0], "bottom" : 0.8 / figsize[1], "right" : 1 - 0.3 / figsize[0], "top" : 1 - 1 / figsize[1] } fig.subplots_adjust(**margins)

Donde figsize es la tupla que fig = pyplot.figure(figsize=...) en fig = pyplot.figure(figsize=...)


plt.savefig("circle.png", bbox_inches=''tight'',pad_inches=-1)