Уменьшить левый и правый поля на графике matplotlib
Я изо всех сил пытаюсь разобраться с моими полями в matplotlib. Я использовал код ниже для создания моей диаграммы:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Однако, я получаю вывод с большим количеством пробелов по обе стороны графика. Я искал google и читал документацию matplotlib, но я не могу найти, как уменьшить это.
Ответы
Ответ 1
Один из способов автоматического выполнения этого - bbox_inches='tight'
kwarg plt.savefig
.
например.
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')
Другой способ - использовать 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')
Ответ 2
Вы можете отрегулировать расстояние между фигурами matplotlib, используя функцию 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)
Это будет работать как на фигуре на экране, так и сохранено в файле, и это правильная функция для вызова, даже если у вас нет нескольких графиков на одном рисунке.
Цифры представляют собой доли размеров фигуры, и их нужно будет отрегулировать так, чтобы они соответствовали меткам фигур.
Ответ 3
Все, что вам нужно, это
plt.tight_layout()
перед выходом.
В дополнение к сокращению полей, это также плотно группирует пространство между любыми подзаголовками:
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()
Ответ 4
Просто используйте "ax = fig.add_axes ([left, bottom, width, height])", если вы хотите точно контролировать макет фигуры. например.
left = 0.05
bottom = 0.05
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
Ответ 5
plt.savefig("circle.png", bbox_inches='tight',pad_inches=-1)
Ответ 6
Проблема с matplotlibs subplots_adjust заключается в том, что введенные вами значения относятся к размеру x и y фигуры. В этом примере приведены правильные значения для печати pdf:
Для этого я пересчитываю относительное расстояние до абсолютных значений следующим образом:
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)
для фигуры дюймов дюймов дюймов дюймов дюймов в дюймах x и размера. дюймов в y-размерности. Таким образом, весь рисунок имеет левый край 5 мм, нижний край 4 мм, правый 1 мм и верх 3 мм внутри этикеток. Преобразование (x/25.4) выполняется, потому что мне нужно было преобразовать мм в дюймы.
Обратите внимание, что чистый размер диаграммы x будет "figure.xsize - левое поле - правое поле", а чистый размер диаграммы y будет "figure.ysize - нижнее поле - верхнее поле" в дюймах
Другие sniplets (не уверен в этих, я просто хотел предоставить другие параметры)
pyplot.figure(figsize = figureSize, dpi = None)
и
pyplot.savefig("outputname.eps", dpi = 100)
Ответ 7
вдохновленный Саммисом ответить выше:
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)
Где figsize - это кортеж, который вы использовали в fig = pyplot.figure(figsize=...)
Ответ 8
Для меня ответы выше не работали с matplotlib.__version__ = 1.4.3
на Win7. Итак, если нас интересует только сам образ (т.е. Если нам не нужны аннотации, оси, тики, заголовок, ярлык и т.д.), Тогда лучше просто сохранить массив numpy как изображение вместо 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)
Кроме того, используя opencv drawing functions (cv2.line, cv2.polylines), мы можем сделать некоторые чертежи непосредственно в массиве numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html