matplotlib
Planuję zestaw danych przy użyciu, gdzie mam Xlabel, który jest dość „wysoki” (jest to formuła renderowana w TeX-ie, która zawiera ułamek, a zatem ma odpowiednik wysokości kilku linii tekstu).
W każdym razie dolna część wzoru jest zawsze odcinana, gdy rysuję liczby. Wydaje się, że zmiana wielkości figury nie pomaga i nie byłem w stanie wymyślić, jak przesunąć „oś X” w górę, aby zrobić miejsce dla Xlabel. Coś takiego byłoby rozsądnym rozwiązaniem tymczasowym, ale fajnie byłoby mieć sposób, aby matplotlib automatycznie rozpoznał, że etykieta została odcięta i odpowiednio zmienił rozmiar.
Oto przykład tego, co mam na myśli:
import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()
podczas gdy możesz zobaczyć cały ylabel, xlabel jest ucięty na dole.
W przypadku, gdy jest to problem specyficzny dla komputera, uruchamiam to na OSX 10.6.8 z matplotlib 1.0.0
źródło
plt.savefig("test.png",bbox_inches='tight')
: stackoverflow.com/questions/21288062/...Odpowiedzi:
Posługiwać się:
zrobić miejsce dla etykiety.
Edytować:
Odkąd dałem odpowiedź,
matplotlib
dodałemtight_layout()
funkcję. Proponuję więc użyć:powinien zrobić miejsce dla Xlabel.
źródło
gcf().subplots_adjust
wolisz niżplt.subplots_adjust
? Czy jest jakaś różnica?gcf
igca
? Zlekceważyłeś wyjaśnić!tight_layout()
naprawiłem odcięcie xlabels, niestety spowodowało to odcięcie mojego ylabel (co nie było wcześniej odcinane). Jednak pierwsze remedium (subplots_adjust(bottom=0.25)
) działało dobrze. Dzięki.gcf()
igca()
odpowiednio „uzyskaj bieżącą liczbę” i „pobierz bieżące osie”.Łatwą opcją jest skonfigurowanie matplotlib, aby automatycznie dostosowywał rozmiar wydruku. Działa idealnie dla mnie i nie jestem pewien, dlaczego nie jest domyślnie aktywowany.
Metoda 1
Ustaw to w swoim pliku matplotlibrc
Zobacz tutaj, aby uzyskać więcej informacji na temat dostosowywania pliku matplotlibrc: http://matplotlib.org/users/customizing.html
Metoda 2
Zaktualizuj rcParams podczas takiego działania
Zaletą korzystania z tego podejścia jest to, że Twój kod będzie generował te same wykresy na różnie skonfigurowanych komputerach.
źródło
Jeśli chcesz zapisać go w pliku, rozwiązujesz go za pomocą
bbox_inches="tight"
argumentu:źródło
Umieszczenie
plot.tight_layout()
po wszystkich zmianach na wykresie, tuż przedshow()
lubsavefig()
rozwiąże problem.źródło
plt.autoscale()
pracował dla mnie.źródło
Możesz również ustawić niestandardowe wypełnienie jako domyślne w swoim
$HOME/.matplotlib/matplotlib_rc
w następujący sposób. W poniższym przykładzie zmodyfikowałem zarówno dolne, jak i lewe dopełnienie:źródło