Poniższy kod tworzy przerwy między wykresami pobocznymi. Jak usunąć przerwy między wykresami cząstkowymi i sprawić, by obraz był ciasną siatką?
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
user3006135
źródło
źródło
None
nie robi tego, co myślisz, oznacza to „użyj domyślnego”.plt.subplots_adjust(wspace=0, hspace=0)
rozwiązałoby twój problem, gdyby nie fakt, że używasz'equal'
aspektu. Zobacz moją odpowiedź po szczegóły.Odpowiedzi:
Możesz użyć gridspec do kontrolowania odstępów między osiami. Więcej informacji znajdziesz tutaj.
źródło
GridSpec
, że jeśli złapiesz figurę podczas tworzenia, możesz również ustawić odległości za pomocą:fig.subplots_adjust(hspace=, wspace=)
for
pętli?subplots
. Ta odpowiedź pozwala wykonać zadanie bez poświęcaniasubplots
.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:
Wynik jest taki:
Jednak z
aspect='equal'
, jak w poniższym kodzie: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:
Oto wynik:
źródło
plt.subplots_adjust(wspace=0, hspace=0)
Bez całkowitego uciekania się do gridspec , do usunięcia przerw można również użyć następującego polecenia, ustawiając wspace i hspace na zero:
Wynik:
źródło
Czy próbowałeś
plt.tight_layout()
?ze
plt.tight_layout()
bez niego:Lub: coś takiego (użyj
add_axes
)Jeśli nie musisz udostępniać osi, po prostu
axLS=map(fig.add_axes, rectLS)
źródło
W przypadku ostatnich wersji matplotlib możesz chcieć wypróbować układ ograniczony . To jednak nie działa
plt.subplot()
, więc musisz użyćplt.subplots()
zamiast tego :źródło