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)