Приведенный ниже код создает промежутки между подзаголовками. Как удалить промежутки между частями и сделать изображение плотной сеткой?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
пользователь3006135
источник
источник
None
Это не то, что вы думаете, это означает «использовать значение по умолчанию».plt.subplots_adjust(wspace=0, hspace=0)
решила бы вашу проблему, если бы не то, что вы используете'equal'
аспект. Подробности смотрите в моем ответе.Ответы:
Вы можете использовать сетку для управления расстоянием между осями. Здесь больше информации .
источник
GridSpec
, что если вы возьмете фигуру при создании, вы также можете установить расстояния с помощью:fig.subplots_adjust(hspace=, wspace=)
for
цикле?subplots
. Этот ответ выполняет работу без жертвsubplots
.Проблема заключается в использовании
aspect='equal'
, который предотвращает растяжение подзаголовков до произвольного соотношения сторон и заполнение всего пустого пространства.Обычно это работает:
Результат такой:
Однако,
aspect='equal'
как в следующем коде:Вот что мы получаем:
Разница во втором случае состоит в том, что вы заставили оси x и y иметь одинаковое количество единиц на пиксель. Поскольку оси меняются от 0 до 1 по умолчанию (то есть до того, как вы что-либо рисуете), использование
aspect='equal'
заставляет каждую ось быть квадратом. Поскольку фигура не является квадратом, pyplot добавляет дополнительный интервал между осями по горизонтали.Чтобы обойти эту проблему, вы можете настроить фигуру на правильное соотношение сторон. Мы собираемся использовать здесь объектно-ориентированный интерфейс pyplot, который я считаю лучшим в целом:
Вот результат:
источник
plt.subplots_adjust(wspace=0, hspace=0)
Не прибегая полностью к gridspec , для удаления пробелов можно также использовать следующее, установив wspace и hspace в ноль:
В результате чего:
источник
Вы пробовали
plt.tight_layout()
?с
plt.tight_layout()
без него:Или: что-то вроде этого (использовать
add_axes
)Если делить оси не нужно, просто
axLS=map(fig.add_axes, rectLS)
источник
В последних версиях matplotlib вы можете попробовать ограниченный макет . Однако это не работает
plt.subplot()
, поэтому вам нужноplt.subplots()
вместо этого использовать :источник