Bardzo podobny do tego pytania, ale z tą różnicą, że moja postać może być tak duża, jak powinna.
Muszę wygenerować całą masę pionowo ułożonych wykresów w matplotlib. Wynik zostanie zapisany za pomocą figsave i wyświetlony na stronie internetowej, więc nie obchodzi mnie, jak wysoki jest końcowy obraz, o ile podploty są rozmieszczone w odstępach, aby się nie nakładały.
Bez względu na to, jak duże pozwolę figurze, wykresy cząstkowe zawsze wydają się nakładać.
Mój kod obecnie wygląda
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
python
matplotlib
Mcstrother
źródło
źródło
tight_layout()
jest strzałem w dziesiątkę. Próbowałem zrozumieć, co jest inne, gdy nie ma to żadnego efektu (pozostają duże marginesy międzysuptitle
) na mój tytuł wątku. Jeśli ktoś napotka podobny problem, oto, co pomogło w mojej sprawie stackoverflow.com/a/45161551/11740420 . Mianowicierect
parametrtight_layout()
Możesz użyć,
plt.subplots_adjust
aby zmienić odstępy między podplotami (źródło)podpis połączenia:
Znaczenie parametrów (i sugerowane wartości domyślne) to:
Rzeczywiste wartości domyślne są kontrolowane przez plik rc
źródło
Przekonałem się, że subplots_adjust (hspace = 0,001) właśnie to dla mnie działa. Kiedy używam spacji = Brak, pomiędzy poszczególnymi polami nadal jest biała przestrzeń. Wydaje się jednak, że ustawienie wartości zbliżonej do zera zmusza ich do wyrównania. To, co tu przesłałem, nie jest najbardziej eleganckim fragmentem kodu, ale możesz zobaczyć, jak działa hspace.
źródło
Metoda plt.subplots_adjust :
lub
Rozmiar zdjęcia ma znaczenie.
„Próbowałem zadzierać z hspace, ale zwiększenie go wydaje się jedynie zmniejszać wszystkie wykresy bez rozwiązania problemu nakładania się”.
Zatem, aby uzyskać więcej białej przestrzeni i utrzymać rozmiar podsuwki, całkowity obraz musi być większy.
źródło
plt.figure(figsize=(10, 7))
rozmiar obrazu to2000 x 1400
pixMożesz spróbować subplot_tool ()
źródło
Podobny do
tight_layout
matplotlib teraz (od wersji 2.2) zapewniaconstrained_layout
. W przeciwieństwie dotight_layout
, który można wywołać w dowolnym momencie kodu dla pojedynczego zoptymalizowanego układu,constrained_layout
jest właściwością, która może być aktywna i zoptymalizuje układ przed każdym krokiem rysowania.Dlatego należy go aktywować przed lub podczas tworzenia podplotu, takiego jak
figure(constrained_layout=True)
lubsubplots(constrained_layout=True)
.Przykład:
constrained_layout można również ustawić za pomocą
rcParams
Zobacz nowość i przewodnik dotyczący układu ograniczonego
źródło
tight_layout
jest zawodnytight_layout()
działało lepiejcontrained_layout
jest wolniejszy, ponieważ jak widać w tej odpowiedzi, optymalizuje układ przed każdym krokiem rysowania .