Проблема заключается в использовании aspect='equal'
, который предотвращает растяжение подзаголовков до произвольного соотношения сторон и заполнение всего пустого пространства.
Обычно это работает:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
plt.subplots_adjust(wspace=0, hspace=0)
Результат такой:
Однако, aspect='equal'
как в следующем коде:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
plt.subplots_adjust(wspace=0, hspace=0)
Вот что мы получаем:
Разница во втором случае состоит в том, что вы заставили оси x и y иметь одинаковое количество единиц на пиксель. Поскольку оси меняются от 0 до 1 по умолчанию (то есть до того, как вы что-либо рисуете), использование aspect='equal'
заставляет каждую ось быть квадратом. Поскольку фигура не является квадратом, pyplot добавляет дополнительный интервал между осями по горизонтали.
Чтобы обойти эту проблему, вы можете настроить фигуру на правильное соотношение сторон. Мы собираемся использовать здесь объектно-ориентированный интерфейс pyplot, который я считаю лучшим в целом:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
fig.subplots_adjust(wspace=0, hspace=0)
Вот результат:
None
Это не то, что вы думаете, это означает «использовать значение по умолчанию».