Я изо всех сил пытаюсь разобраться с моими полями заговора в matplotlib. Я использовал приведенный ниже код для создания своей диаграммы:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Тем не менее, я получаю выходную фигуру с большим количеством пустого пространства по обе стороны от графика. Я искал в Google и прочитал документацию по matplotlib, но, похоже, не могу найти, как это уменьшить.
python
matplotlib
robintw
источник
источник
extent
частиimshow
рисунка, или количество границ пробелов в результирующем PNG, вокруг фигуры, генерируетсяsavefig
?savefig
- так что это то, что я хотел бы отсортировать.Ответы:
Один из способов сделать это автоматически - это
bbox_inches='tight'
kwargplt.savefig
.Например
Другой способ заключается в использовании
fig.tight_layout()
источник
fig.savefig()
тоже. (plt.savefig()
не будет работать в этом случае.)fig.tight_layout()
. Та функция не существовала, когда этот ответ был первоначально написан, иначе я упомянул бы это более заметно.fig = plt.gcf()
Вы можете настроить интервал вокруг рисунков matplotlib с помощью функции subplots_adjust ():
Это будет работать как для фигуры на экране, так и для сохранения в файл, и это правильная функция для вызова, даже если у вас нет нескольких графиков на одной фигуре.
Числа являются долями размеров фигуры, и их необходимо будет скорректировать, чтобы учесть метки фигуры.
источник
GridSpec
объектами, вызываяupdate
метод (см. Stackoverflow.com/a/20058199/1030876 ).Все, что тебе нужно
до вашего выхода.
В дополнение к сокращению полей это также плотно группирует пространство между любыми подсюжетами:
источник
bbox_inches='tight'
, что просто обрезает пустое пространство по краям, но оставляет график в покое. Я создал фигуру сplt.figure(figsize=(10,3))
.Просто используйте,
ax = fig.add_axes([left, bottom, width, height])
если вы хотите точный контроль над макетом фигуры. например.источник
Если кому-то интересно, как избавиться от остальной части белого поля после применения
plt.tight_layout()
илиfig.tight_layout()
: с помощью параметраpad
(который1.08
по умолчанию), вы можете сделать его еще более плотным: субплоты, как часть размера шрифта. " Так напримеруменьшит его до очень небольшого запаса. Помещение
0
не работает для меня, так как это делает коробку подзаголовка также немного отрезанной.источник
источник
savefig
функции элегантно, однако отрицательное значениеpad_inches
не обязательно необходимо в каждом случае.Проблема с matplotlibs subplots_adjust заключается в том, что введенные вами значения относятся к размеру фигуры x и y на рисунке. Этот пример для правильного определения размеров для печати PDF:
Для этого я пересчитываю относительный интервал в абсолютные значения, например:
для фигуры дюймов figure.xsize в x-измерении и дюймов figure.ysize в y-измерении. Таким образом, вся цифра имеет левое поле 5 мм, нижнее поле 4 мм, правое поле 1 мм и верхнее 3 мм внутри меток. Преобразование (x / 25.4) сделано потому, что мне нужно было преобразовать мм в дюймы.
Обратите внимание, что чистый размер диаграммы x будет «figure.xsize - левое поле - правое поле», а чистый размер диаграммы y будет «figure.ysize - нижнее поле - верхнее поле» в дюймах.
Другие фрагменты (не уверен насчет этих, я просто хотел предоставить другие параметры)
и
источник
xsize
иysize
откуда. Я использую эти свойства и получаюAttributeError: 'Figure' object has no attribute 'xsize'
вдохновленный ответом Sammys выше:
Где figsize - это кортеж, который вы использовали в
fig = pyplot.figure(figsize=...)
источник
Для меня ответы выше не работали
matplotlib.__version__ = 1.4.3
на Win7. Итак, если нас интересует только само изображение (т. Е. Если нам не нужны аннотации, ось, метки, заголовок, ylabel и т. Д.), То лучше просто сохранить массив Numpy в качестве изображения, а неsavefig
.Кроме того, используя функции рисования opencv (cv2.line, cv2.polylines), мы можем сделать некоторые рисунки непосредственно в массиве numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html
источник
В последних версиях matplotlib вы можете попробовать Constrained Layout .
источник