Проблема полягає у використанні 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, який, на мою думку, перевершую в цілому:
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
Це не робить те, що ви думаєте, це означає "використовувати типовий"