Problem polega na używaniu aspect='equal'
, które zapobiega rozciągnięciu podpunktów do dowolnego współczynnika kształtu i wypełnieniu całej pustej przestrzeni.
Zwykle to zadziała:
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)
Wynik jest taki:
Jednak z aspect='equal'
, jak w poniższym kodzie:
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)
Oto, co otrzymujemy:
Różnica w tym drugim przypadku polega na tym, że wymusiłeś na osiach X i Y taką samą liczbę jednostek / piksel. Ponieważ osie domyślnie przechodzą od 0 do 1 (tj. Zanim cokolwiek wykreślisz), użycie aspect='equal'
wymusza, aby każda oś była kwadratem. Ponieważ figura nie jest kwadratem, pyplot dodaje dodatkowe odstępy między osiami w poziomie.
Aby obejść ten problem, możesz ustawić figurę tak, aby miała prawidłowe proporcje. Użyjemy tutaj zorientowanego obiektowo interfejsu pyplot, który ogólnie uważam za lepszy:
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)
Oto wynik:
None
nie robi tego, co myślisz, oznacza to „użyj domyślnego”.